We only need to access the PCI device config file when attaching/detaching the device to a domain. Keeping it open all the time the device is attached to a domain is useless. --- src/libvirt_private.syms | 1 + src/qemu/qemu_hostdev.c | 6 ++++-- src/util/pci.c | 6 +++--- src/util/pci.h | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 625490f..672a99a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -986,6 +986,7 @@ virNWFilterVarValueGetSimple; # pci.h pciConfigAddressToSysfsFile; pciDettachDevice; +pciDeviceClose; pciDeviceFileIterate; pciDeviceGetManaged; pciDeviceGetName; diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c index a748b8b..ef4722e 100644 --- a/src/qemu/qemu_hostdev.c +++ b/src/qemu/qemu_hostdev.c @@ -545,9 +545,11 @@ int qemuPrepareHostdevPCIDevices(virQEMUDriverPtr driver, pciFreeDevice(dev); } - /* Loop 9: Now steal all the devices from pcidevs */ + /* Loop 9: Now steal all the devices from pcidevs and close + * their config files + */ while (pciDeviceListCount(pcidevs) > 0) - pciDeviceListStealIndex(pcidevs, 0); + pciDeviceClose(pciDeviceListStealIndex(pcidevs, 0)); ret = 0; goto cleanup; diff --git a/src/util/pci.c b/src/util/pci.c index 3ebf6f7..e32f2e0 100644 --- a/src/util/pci.c +++ b/src/util/pci.c @@ -185,8 +185,8 @@ pciOpenConfig(pciDevice *dev) return 0; } -static void -pciCloseConfig(pciDevice *dev) +void +pciDeviceClose(pciDevice *dev) { if (!dev) return; @@ -1407,7 +1407,7 @@ pciFreeDevice(pciDevice *dev) if (!dev) return; VIR_DEBUG("%s %s: freeing", dev->id, dev->name); - pciCloseConfig(dev); + pciDeviceClose(dev); VIR_FREE(dev->path); VIR_FREE(dev); } diff --git a/src/util/pci.h b/src/util/pci.h index 814c24e..91ebaff 100644 --- a/src/util/pci.h +++ b/src/util/pci.h @@ -65,6 +65,7 @@ unsigned pciDeviceGetReprobe(pciDevice *dev); void pciDeviceSetReprobe(pciDevice *dev, unsigned reprobe); void pciDeviceReAttachInit(pciDevice *dev); +void pciDeviceClose(pciDevice *dev); pciDeviceList *pciDeviceListNew (void); void pciDeviceListFree (pciDeviceList *list); -- 1.8.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list