>>> On 3/10/2016 at 08:08 AM, in message <56E0BB0F.3000705@xxxxxxxx>, Jim Fehlig <jfehlig@xxxxxxxx> wrote: > Hi Chunyan, > > Sorry for the long delay... > > On 02/23/2016 01:07 AM, Chunyan Liu wrote: > > Add codes to support creating domain with network defition of assigning > > SRIOV VF from a pool. And fix hot plug and unplug SRIOV VF under this > > kind of network defition. > > > > Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx> > > --- > > Changes: > > * move bug fix to another patch > > * use virDomainNetGetActualType instead of multiple times checking > > --- > > src/libxl/libxl_conf.c | 3 ++- > > src/libxl/libxl_domain.c | 46 > ++++++++++++++++++++++++++++++++++++++++++++++ > > src/libxl/libxl_driver.c | 12 ++++++++++++ > > tests/Makefile.am | 3 +++ > > 4 files changed, 63 insertions(+), 1 deletion(-) > > > > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c > > index 48b8826..3cefbaa 100644 > > --- a/src/libxl/libxl_conf.c > > +++ b/src/libxl/libxl_conf.c > > @@ -1453,7 +1453,8 @@ libxlMakeNicList(virDomainDefPtr def, > libxl_domain_config *d_config) > > return -1; > > > > for (i = 0; i < nnics; i++) { > > - if (l_nics[i]->type == VIR_DOMAIN_NET_TYPE_HOSTDEV) > > + if (virDomainNetGetActualType(l_nics[i]) > > + == VIR_DOMAIN_NET_TYPE_HOSTDEV) > > AFAICT this change is unrelated to the patch subject and should be done in a > separate patch. Also the patch no longer applies cleanly. Can you drop this > hunk, rebase, and send a V3? Thanks! Updated. V3 is posted. Thanks, Chunyan > > Regards, > Jim > > > continue; > > > > if (libxlMakeNic(def, l_nics[i], &x_nics[nvnics])) > > diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c > > index 50f7eed..88d1399 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 > > > > @@ -929,6 +930,48 @@ libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, > void *for_callback) > > libxl_event_free(ctx, ev); > > } > > > > +static int > > +libxlNetworkPrepareDevices(virDomainDefPtr def) > > +{ > > + int ret = -1; > > + 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) > > + goto cleanup; > > + > > + 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) > > + goto cleanup; > > + } > > + } > > + ret = 0; > > + cleanup: > > + return ret; > > +} > > > > /* > > * Start a domain through libxenlight. > > @@ -1005,6 +1048,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, > virDomainObjPtr vm, > > vm, true) < 0) > > goto cleanup; > > > > + if (libxlNetworkPrepareDevices(vm->def) < 0) > > + goto cleanup; > > + > > if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def, > > cfg->ctx, &d_config) < 0) > > goto cleanup; > > diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c > > index 404016e..eef6651 100644 > > --- a/src/libxl/libxl_driver.c > > +++ b/src/libxl/libxl_driver.c > > @@ -3049,6 +3049,12 @@ libxlDomainAttachHostPCIDevice(libxlDriverPrivatePtr > driver, > > > > libxl_device_pci_init(&pcidev); > > > > + /* For those allocated from a network pool/ determined at runtime, > it's > > + * not handled by libxlDomainDeviceDefPostParse as hostdev, we need to > > + * set backend correctly. > > + */ > > + pcisrc->backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN; > > + > > if (virDomainHostdevFind(vm->def, hostdev, &found) >= 0) { > > virReportError(VIR_ERR_OPERATION_FAILED, > > _("target pci device %.4x:%.2x:%.2x.%.1x already > exists"), > > @@ -3390,6 +3396,12 @@ libxlDomainDetachHostPCIDevice(libxlDriverPrivatePtr > driver, > > > > libxl_device_pci_init(&pcidev); > > > > + /* For those allocated from a network pool/ determined at runtime, > it's > > + * not handled by libxlDomainDeviceDefPostParse as hostdev, we need to > > + * set backend correctly. > > + */ > > + pcisrc->backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN; > > + > > idx = virDomainHostdevFind(vm->def, hostdev, &detach); > > if (idx < 0) { > > virReportError(VIR_ERR_OPERATION_FAILED, > > diff --git a/tests/Makefile.am b/tests/Makefile.am > > index 90981dc..b08cc7a 100644 > > --- a/tests/Makefile.am > > +++ b/tests/Makefile.am > > @@ -530,6 +530,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 = \ > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list