]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Use spapr-vscsi on pseries machine type
authorMichael Ellerman <michael@ellerman.id.au>
Thu, 8 Dec 2011 06:41:24 +0000 (17:41 +1100)
committerEric Blake <eblake@redhat.com>
Fri, 9 Dec 2011 20:03:33 +0000 (13:03 -0700)
On the PPC64 pseries machine type we need to use the spapr-vscsi device
rather than an lsi.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
AUTHORS
src/qemu/qemu_command.c
src/qemu/qemu_command.h
src/qemu/qemu_hotplug.c

diff --git a/AUTHORS b/AUTHORS
index 9ea1efdc5a04594f3162e2260781a53e9d017656..fb26300307f7dda978f635f7fb10c9190d2b0588 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -211,6 +211,7 @@ Patches have also been contributed by:
   Lorin Hochstein      <lorin@isi.edu>
   Christian Franke     <nobody@nowhere.ws>
   Prerna Saxena        <prerna@linux.vnet.ibm.com>
+  Michael Ellerman     <michael@ellerman.id.au>
 
   [....send patches to get your name here....]
 
index 97d2463e911c0eacb380d9f7f2f710a09648f021..cc8dc9b3548b53f0951d4c7acd45a975bbab0413 100644 (file)
@@ -2117,7 +2117,8 @@ qemuBuildUSBControllerDevStr(virDomainControllerDefPtr def,
 }
 
 char *
-qemuBuildControllerDevStr(virDomainControllerDefPtr def,
+qemuBuildControllerDevStr(virDomainDefPtr domainDef,
+                          virDomainControllerDefPtr def,
                           virBitmapPtr qemuCaps,
                           int *nusbcontroller)
 {
@@ -2125,7 +2126,12 @@ qemuBuildControllerDevStr(virDomainControllerDefPtr def,
 
     switch (def->type) {
     case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
-        virBufferAddLit(&buf, "lsi");
+        if (STREQ(domainDef->os.arch, "ppc64") &&
+            STREQ(domainDef->os.machine, "pseries")) {
+            virBufferAddLit(&buf, "spapr-vscsi");
+        } else {
+            virBufferAddLit(&buf, "lsi");
+        }
         virBufferAsprintf(&buf, ",id=scsi%d", def->idx);
         break;
 
@@ -4039,7 +4045,7 @@ qemuBuildCommandLine(virConnectPtr conn,
                     char *devstr;
 
                     virCommandAddArg(cmd, "-device");
-                    if (!(devstr = qemuBuildControllerDevStr(cont, qemuCaps, NULL)))
+                    if (!(devstr = qemuBuildControllerDevStr(def, cont, qemuCaps, NULL)))
                         goto error;
 
                     virCommandAddArg(cmd, devstr);
@@ -4058,7 +4064,7 @@ qemuBuildCommandLine(virConnectPtr conn,
                 virCommandAddArg(cmd, "-device");
 
                 char *devstr;
-                if (!(devstr = qemuBuildControllerDevStr(def->controllers[i], qemuCaps,
+                if (!(devstr = qemuBuildControllerDevStr(def, def->controllers[i], qemuCaps,
                                                          &usbcontroller)))
                     goto error;
 
index 1fe039415f92201d10316627720a804022bd950c..3978b2b3619e47b2bb41c118e4974cc7610da22b 100644 (file)
@@ -95,7 +95,8 @@ char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk,
 char * qemuBuildFSDevStr(virDomainFSDefPtr fs,
                          virBitmapPtr qemuCaps);
 /* Current, best practice */
-char * qemuBuildControllerDevStr(virDomainControllerDefPtr def,
+char * qemuBuildControllerDevStr(virDomainDefPtr domainDef,
+                                 virDomainControllerDefPtr def,
                                  virBitmapPtr qemuCaps,
                                  int *nusbcontroller);
 
index 96c00701cd8c10a838d39b12aef94700be24d4e8..eabfeaa760eea752f9dd0c2950c7965a8880004a 100644 (file)
@@ -329,7 +329,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver,
             goto cleanup;
         }
 
-        if (!(devstr = qemuBuildControllerDevStr(controller, priv->qemuCaps, NULL))) {
+        if (!(devstr = qemuBuildControllerDevStr(vm->def, controller, priv->qemuCaps, NULL))) {
             goto cleanup;
         }
     }