[libvirt] [PATCHv3 07/11] qemu: Allow multiple vhost-net openings

Laine Stump laine at laine.org
Sat May 18 05:42:01 UTC 2013


On 05/16/2013 08:49 AM, Michal Privoznik wrote:
> With multiqueue network feature, we are advised to pass multiple
> vhost-net FDs as well. The ratio should be 1:1. Therefore we must
> alter the qemuOpenVhostNet function to allow that.
> ---
>  src/qemu/qemu_command.c | 60 ++++++++++++++++++++++++++++++++++++-------------
>  src/qemu/qemu_command.h |  3 ++-
>  src/qemu/qemu_hotplug.c | 12 ++++++----
>  3 files changed, 54 insertions(+), 21 deletions(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index a053d49..ec66a33 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -405,17 +405,34 @@ cleanup:
>  }
>  
>  
> +/**
> + * qemuOpenVhostNet:
> + * @def: domain definition
> + * @net: network definition
> + * @qemuCaps: qemu binary capabilities
> + * @vhostfd: array of opened vhost-net device
> + * @vhostfdSize: size of @vhostfd array
> + *
> + * Open vhost-net, multiple times - if requested.
> + * In case, no vhost-net is needed, @vhostfdSize is set to 0
> + * and 0 is returned.
> + *
> + * Returns: 0 on success
> + *         -1 on failure
> + */
>  int
>  qemuOpenVhostNet(virDomainDefPtr def,
>                   virDomainNetDefPtr net,
>                   virQEMUCapsPtr qemuCaps,
> -                 int *vhostfd)
> +                 int *vhostfd,
> +                 int *vhostfdSize)
>  {
> -    *vhostfd = -1;   /* assume we won't use vhost */
> +    int i;
>  
>      /* If the config says explicitly to not use vhost, return now */
>      if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_QEMU) {
> -       return 0;
> +        *vhostfdSize = 0;
> +        return 0;
>      }
>  
>      /* If qemu doesn't support vhost-net mode (including the -netdev command
> @@ -430,6 +447,7 @@ qemuOpenVhostNet(virDomainDefPtr def,
>                                     "this QEMU binary"));
>              return -1;
>          }
> +        *vhostfdSize = 0;
>          return 0;
>      }
>  
> @@ -441,23 +459,32 @@ qemuOpenVhostNet(virDomainDefPtr def,
>                                     "virtio network interfaces"));
>              return -1;
>          }
> +        *vhostfdSize = 0;
>          return 0;
>      }
>  
> -    *vhostfd = open("/dev/vhost-net", O_RDWR);
> -    virDomainAuditNetDevice(def, net, "/dev/vhost-net", *vhostfd >= 0);
> +    for (i = 0; i < *vhostfdSize; i++) {
> +        vhostfd[i] = open("/dev/vhost-net", O_RDWR);
> +        virDomainAuditNetDevice(def, net, "/dev/vhost-net", vhostfd[i] >= 0);

I just realized while reviewing the next patch that we probably only
want a single audit message here, rather than one for each individual fd.





More information about the libvir-list mailing list