On 2012年12月04日 18:38, Jiri Denemark wrote:
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);

ACK

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to