[libvirt] [PATCH V5] libxl: support creating domain with VF assignment from a pool

Jim Fehlig jfehlig at suse.com
Thu Apr 14 01:55:39 UTC 2016


On 04/07/2016 04:09 AM, Chunyan Liu wrote:
> Add codes to support creating domain with network defition of assigning
> SRIOV VF from a pool.
>
> Signed-off-by: Chunyan Liu <cyliu at suse.com>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
> Rebase and send a new version.

ACK. Thanks for the patience. I've pushed this now.

Regards,
Jim

>
>  src/libxl/libxl_domain.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/Makefile.am        |  3 +++
>  2 files changed, 51 insertions(+)
>
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index 04962a0..bd5deaa 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -36,6 +36,7 @@
>  #include "virtime.h"
>  #include "locking/domain_lock.h"
>  #include "xen_common.h"
> +#include "network/bridge_driver.h"
>  
>  #define VIR_FROM_THIS VIR_FROM_LIBXL
>  
> @@ -764,6 +765,10 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
>              if (net->ifname &&
>                  STRPREFIX(net->ifname, LIBXL_GENERATED_PREFIX_XEN))
>                  VIR_FREE(net->ifname);
> +
> +            /* cleanup actual device */
> +            virDomainNetRemoveHostdev(vm->def, net);
> +            networkReleaseActualDevice(vm->def, net);
>          }
>      }
>  
> @@ -900,6 +905,46 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
>      return -1;
>  }
>  
> +static int
> +libxlNetworkPrepareDevices(virDomainDefPtr def)
> +{
> +    size_t i;
> +
> +    for (i = 0; i < def->nnets; i++) {
> +        virDomainNetDefPtr net = def->nets[i];
> +        int actualType;
> +
> +        /* If appropriate, grab a physical device from the configured
> +         * network's pool of devices, or resolve bridge device name
> +         * to the one defined in the network definition.
> +         */
> +        if (networkAllocateActualDevice(def, net) < 0)
> +            return -1;
> +
> +        actualType = virDomainNetGetActualType(net);
> +        if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV &&
> +            net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> +            /* Each type='hostdev' network device must also have a
> +             * corresponding entry in the hostdevs array. For netdevs
> +             * that are hardcoded as type='hostdev', this is already
> +             * done by the parser, but for those allocated from a
> +             * network / determined at runtime, we need to do it
> +             * separately.
> +             */
> +            virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net);
> +            virDomainHostdevSubsysPCIPtr pcisrc = &hostdev->source.subsys.u.pci;
> +
> +            if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
> +                hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
> +                pcisrc->backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN;
> +
> +            if (virDomainHostdevInsert(def, hostdev) < 0)
> +                return -1;
> +        }
> +    }
> +    return 0;
> +}
> +
>  static void
>  libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback)
>  {
> @@ -1050,6 +1095,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
>          goto cleanup;
>      VIR_FREE(priv->lockState);
>  
> +    if (libxlNetworkPrepareDevices(vm->def) < 0)
> +        goto cleanup_dom;
> +
>      if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
>                                 cfg->ctx, &d_config) < 0)
>          goto cleanup_dom;
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index b3f1144..db4f88b 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -534,6 +534,9 @@ endif ! WITH_XEN
>  
>  if WITH_LIBXL
>  libxl_LDADDS = ../src/libvirt_driver_libxl_impl.la
> +if WITH_NETWORK
> +libxl_LDADDS += ../src/libvirt_driver_network_impl.la
> +endif WITH_NETWORK
>  libxl_LDADDS += $(LDADDS)
>  
>  xlconfigtest_SOURCES = \




More information about the libvir-list mailing list