]> xenbits.xensource.com Git - people/dariof/libvirt.git/commitdiff
pci: update stubDriver name in virPCIDeviceBindToStub
authorLaine Stump <laine@laine.org>
Mon, 3 Jun 2013 17:50:42 +0000 (13:50 -0400)
committerLaine Stump <laine@laine.org>
Tue, 25 Jun 2013 22:10:25 +0000 (18:10 -0400)
If the device is bound to a stub driver different from what is saved
in the virPCIDevice's stubDriver attribute, update it.

src/util/virpci.c

index aa72d45732ccec37a7a244c5675b5b1e3d09c495..2d18e6625bcfca21a8f912a759b8105799a5d643 100644 (file)
@@ -1079,6 +1079,7 @@ virPCIDeviceBindToStub(virPCIDevicePtr dev,
     char *oldDriverPath = NULL;
     char *oldDriverName = NULL;
     char *path = NULL; /* reused for different purposes */
+    const char *newDriverName = NULL;
 
     if (virPCIDriverDir(&stubDriverPath, stubDriverName) < 0 ||
         virPCIFile(&driverLink, dev->name, "driver") < 0 ||
@@ -1092,6 +1093,7 @@ virPCIDeviceBindToStub(virPCIDevicePtr dev,
             /* The device is already bound to the correct driver */
             VIR_DEBUG("Device %s is already bound to %s",
                       dev->name, stubDriverName);
+            newDriverName = stubDriverName;
             result = 0;
             goto cleanup;
         }
@@ -1203,6 +1205,7 @@ remove_id:
         goto cleanup;
     }
 
+    newDriverName = stubDriverName;
     result = 0;
 
 cleanup:
@@ -1212,6 +1215,11 @@ cleanup:
     VIR_FREE(oldDriverName);
     VIR_FREE(path);
 
+    if (newDriverName &&
+        STRNEQ_NULLABLE(dev->stubDriver, newDriverName)) {
+        VIR_FREE(dev->stubDriver);
+        result = VIR_STRDUP(dev->stubDriver, newDriverName);
+    }
     if (result < 0)
         virPCIDeviceUnbindFromStub(dev);