[libvirt] [PATCH 04/13] qemu: restructure qemuAssignDeviceControllerAlias

Laine Stump laine at laine.org
Tue May 5 18:03:09 UTC 2015


No functional change, just rearrange this function and pass in full
domain definition to make it simpler to add exceptions.
---
 src/qemu/qemu_command.c | 32 ++++++++++++++++++++++----------
 src/qemu/qemu_command.h |  2 +-
 src/qemu/qemu_hotplug.c |  4 ++--
 3 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index b76bd98..340478c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1031,22 +1031,34 @@ qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redir
 
 
 int
-qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller)
+qemuAssignDeviceControllerAlias(ATTRIBUTE_UNUSED virDomainDefPtr def,
+                                virDomainControllerDefPtr controller)
 {
-    const char *prefix = virDomainControllerTypeToString(controller->type);
+    int ret = 0;
+
+    VIR_FREE(controller->info.alias);
 
-    if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
-        /* only pcie-root uses a different naming convention
-         * ("pcie.0"), because it is hardcoded that way in qemu. All
-         * other buses use the consistent "pci.%u".
+    switch (controller->type) {
+    case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
+        /* pcie-root uses a different naming convention ("pcie.0"),
+         * because it is hardcoded that way in qemu. All other PCI
+         * buses use the consistent "pci.%u".
          */
         if (controller->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT)
-            return virAsprintf(&controller->info.alias, "pcie.%d", controller->idx);
+            ret = virAsprintf(&controller->info.alias, "pcie.%d", controller->idx);
         else
-            return virAsprintf(&controller->info.alias, "pci.%d", controller->idx);
+            ret = virAsprintf(&controller->info.alias, "pci.%d", controller->idx);
+        break;
+    default:
+        break;
     }
 
-    return virAsprintf(&controller->info.alias, "%s%d", prefix, controller->idx);
+    /* catchall for anything that wasn't an exception */
+    if (ret == 0 && !controller->info.alias)
+        ret = virAsprintf(&controller->info.alias, "%s%d",
+                          virDomainControllerTypeToString(controller->type),
+                          controller->idx);
+    return ret;
 }
 
 static ssize_t
@@ -1174,7 +1186,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
             return -1;
     }
     for (i = 0; i < def->ncontrollers; i++) {
-        if (qemuAssignDeviceControllerAlias(def->controllers[i]) < 0)
+        if (qemuAssignDeviceControllerAlias(def, def->controllers[i]) < 0)
             return -1;
     }
     for (i = 0; i < def->ninputs; i++) {
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index 675eb62..d066953 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -287,7 +287,7 @@ int qemuAssignDeviceDiskAlias(virDomainDefPtr vmdef,
                               virDomainDiskDefPtr def,
                               virQEMUCapsPtr qemuCaps);
 int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr hostdev, int idx);
-int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller);
+int qemuAssignDeviceControllerAlias(virDomainDefPtr def, virDomainControllerDefPtr controller);
 int qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redirdev, int idx);
 int qemuAssignDeviceChrAlias(virDomainDefPtr def,
                              virDomainChrDefPtr chr,
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 613b728..24a5f51 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -465,7 +465,7 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
                 goto cleanup;
         }
         releaseaddr = true;
-        if (qemuAssignDeviceControllerAlias(controller) < 0)
+        if (qemuAssignDeviceControllerAlias(vm->def, controller) < 0)
             goto cleanup;
 
         if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
@@ -3631,7 +3631,7 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver,
 
     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
         !detach->info.alias) {
-        if (qemuAssignDeviceControllerAlias(detach) < 0)
+        if (qemuAssignDeviceControllerAlias(vm->def, detach) < 0)
             goto cleanup;
     }
 
-- 
2.1.0




More information about the libvir-list mailing list