[libvirt] [PATCH 4/8] Reset PCI host devices after hot-unplug

Mark McLoughlin markmc at redhat.com
Mon Aug 17 14:10:17 UTC 2009


When we hot-unplug a PCI host device from a guest, we should reset it.

Both managed and unmanaged devices should be reset, but only managed
devices should be re-attached.

* src/qemu_driver.c: reset devices in qemudDomainDetachHostPciDevice()
---
 src/qemu_driver.c |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 06bbf2a..187497f 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -5780,6 +5780,7 @@ static int qemudDomainDetachHostPciDevice(virConnectPtr conn,
     virDomainHostdevDefPtr detach;
     char *cmd, *reply;
     int i, ret;
+    pciDevice *pci;
 
     for (i = 0 ; i < vm->def->nhostdevs ; i++) {
         unsigned domain   = vm->def->hostdevs[i]->source.subsys.u.pci.domain;
@@ -5848,16 +5849,19 @@ static int qemudDomainDetachHostPciDevice(virConnectPtr conn,
 
     ret = 0;
 
-    if (detach->managed) {
-        pciDevice *pci = pciGetDevice(conn,
-                                      detach->source.subsys.u.pci.domain,
-                                      detach->source.subsys.u.pci.bus,
-                                      detach->source.subsys.u.pci.slot,
-                                      detach->source.subsys.u.pci.function);
-        if (!pci || pciReAttachDevice(conn, pci) < 0)
+    pci = pciGetDevice(conn,
+                       detach->source.subsys.u.pci.domain,
+                       detach->source.subsys.u.pci.bus,
+                       detach->source.subsys.u.pci.slot,
+                       detach->source.subsys.u.pci.function);
+    if (!pci)
+        ret = -1;
+    else {
+        if (pciResetDevice(conn, pci) < 0)
+            ret = -1;
+        if (detach->managed && pciReAttachDevice(conn, pci) < 0)
             ret = -1;
-        if (pci)
-            pciFreeDevice(conn, pci);
+        pciFreeDevice(conn, pci);
     }
 
     if (i != --vm->def->nhostdevs)
-- 
1.6.2.5




More information about the libvir-list mailing list