From: Chunyan Liu Date: Mon, 21 Mar 2016 08:11:40 +0000 (+0800) Subject: libxl: fix hot add/remove VF from a pool X-Git-Tag: v1.3.3-rc1~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=373b9e9f000cad36b3d6b7d623c466bfc0e62754;p=thirdparty%2Flibvirt.git libxl: fix hot add/remove VF from a pool For those VF allocated from a network pool, we need to set its backend to be VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN so that later work can be correct. Signed-off-by: Chunyan Liu --- diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index cc7f224635..cfc45552f0 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3145,13 +3145,23 @@ libxlDomainAttachNetDevice(libxlDriverPrivatePtr driver, } if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) { + virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net); + virDomainHostdevSubsysPCIPtr pcisrc = &hostdev->source.subsys.u.pci; + + /* For those just allocated from a network pool whose backend is + * still VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, we need to set + * backend correctly. + */ + 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; + /* This is really a "smart hostdev", so it should be attached * as a hostdev (the hostdev code will reach over into the * netdev-specific code as appropriate), then also added to * the nets list (see out:) if successful. */ - ret = libxlDomainAttachHostDevice(driver, vm, - virDomainNetGetActualHostdev(net)); + ret = libxlDomainAttachHostDevice(driver, vm, hostdev); goto cleanup; }