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