[libvirt] [PATCHv3 1/2] qemu: support vhost in attach-interface
Laine Stump
laine at laine.org
Thu Mar 10 04:54:25 UTC 2011
On 03/09/2011 03:42 PM, Eric Blake wrote:
> * src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Honor vhost
> designations, similar to qemu_command code paths.
> * src/qemu/qemu_command.h (qemuOpenVhostNet): New prototype.
> * src/qemu/qemu_command.c (qemuOpenVhostNet): Export.
> ---
>
> Hmm, I just realized that it might be nice to have a --driver-name
> flag in the virsh attach-interface wrapper command. Oh well, that can
> be a separate patch.
>
> src/qemu/qemu_command.c | 3 +-
> src/qemu/qemu_command.h | 4 +++
> src/qemu/qemu_hotplug.c | 54 ++++++++++++++++++++++++++++++++++++++++++----
> 3 files changed, 54 insertions(+), 7 deletions(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 198a4e2..8cf1737 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -303,12 +303,11 @@ cleanup:
> }
>
>
> -static int
> +int
> qemuOpenVhostNet(virDomainNetDefPtr net,
> virBitmapPtr qemuCaps,
> int *vhostfd)
> {
> -
> *vhostfd = -1; /* assume we won't use vhost */
>
> /* If the config says explicitly to not use vhost, return now */
> diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
> index 1902472..2ae364c 100644
> --- a/src/qemu/qemu_command.h
> +++ b/src/qemu/qemu_command.h
> @@ -129,6 +129,10 @@ int qemuPhysIfaceConnect(virConnectPtr conn,
> const unsigned char *vmuuid,
> enum virVMOperationType vmop);
>
> +int qemuOpenVhostNet(virDomainNetDefPtr net,
> + virBitmapPtr qemuCaps,
> + int *vhostfd);
> +
> int qemudCanonicalizeMachine(struct qemud_driver *driver,
> virDomainDefPtr def);
>
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 7895062..e8567ad 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -552,6 +552,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
> qemuDomainObjPrivatePtr priv = vm->privateData;
> char *tapfd_name = NULL;
> int tapfd = -1;
> + char *vhostfd_name = NULL;
> + int vhostfd = -1;
> char *nicstr = NULL;
> char *netstr = NULL;
> int ret = -1;
> @@ -592,6 +594,24 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
> return -1;
> }
>
> + if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK ||
> + net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
> + net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
> + /* Attempt to use vhost-net mode for these types of
> + network device */
> + if (qemuOpenVhostNet(net, qemuCaps,&vhostfd)< 0)
> + goto cleanup;
> +
> + if (vhostfd>= 0&&
> + priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
> + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("network device type '%s' cannot be attached: "
> + "qemu is not using a unix socket monitor"),
> + virDomainNetTypeToString(net->type));
> + goto cleanup;
> + }
The above check has already been handled by a combination of the checks
in the if { } else if { } block above, so it's superfluous here.
ACK with this extra check for monConfig-type removed.
More information about the libvir-list
mailing list