]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: add ibmvscsi controller model
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Feb 2012 09:08:23 +0000 (17:08 +0800)
committerOsier Yang <jyang@redhat.com>
Tue, 28 Feb 2012 06:27:00 +0000 (14:27 +0800)
KVM will be able to use a PCI SCSI controller even on POWER.  Let
the user specify the vSCSI controller by other means than a default.

After this patch, the QEMU driver will actually look at the model
and reject anything but auto, lsilogic and ibmvscsi.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Osier Yang <jyang@redhat.com>
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/vmx/vmx.c

index 5305f82daace189f9d1261fb3dcfb473fc4c89bc..25f8da5da07917c056274286e32986b2d23d7cb1 100644 (file)
       attributes <code>ports</code> and <code>vectors</code>, which
       control how many devices can be connected through the
       controller.  A "scsi" controller has an optional
-      attribute <code>model</code>, which is one of "auto",
-      "buslogic", "lsilogic", "lsias1068", or "vmpvscsi".
+      attribute <code>model</code>, which is one of "auto", "buslogic",
+      "ibmvscsi", "lsilogic", "lsias1068", or "vmpvscsi".
       A "usb" controller has an optional attribute <code>model</code>,
       which is one of "piix3-uhci", "piix4-uhci", "ehci",
       "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3",
index e276a92ce1b6b3d46ee00f017de2018bd749dd8b..d3deaea457ad5eec284d328dbcb243b87a1fbb47 100644 (file)
             <value>lsilogic</value>
             <value>lsisas1068</value>
             <value>vmpvscsi</value>
+            <value>ibmvscsi</value>
             <value>piix3-uhci</value>
             <value>piix4-uhci</value>
             <value>ehci</value>
index b0c3fa67b7578b506474becaa23e27876bf60036..18e8b97d2d1e3a3dba48d512c186a33030a3f897 100644 (file)
@@ -238,7 +238,8 @@ VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAS
               "buslogic",
               "lsilogic",
               "lsisas1068",
-              "vmpvscsi")
+              "vmpvscsi",
+              "ibmvscsi");
 
 VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST,
               "piix3-uhci",
index 9c8792a2e30275d6d4eafd5762083b3fc147bb53..aa8c82458973d3096d3646d1ace9828033e41718 100644 (file)
@@ -452,6 +452,7 @@ enum virDomainControllerModelSCSI {
     VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC,
     VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068,
     VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI,
+    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI,
 
     VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
 };
index e783f22e421f257eeca5db6f7cfcab1538021f49..90d9948c5d83c99ab7d5656fdeea7e4137a7cefd 100644 (file)
@@ -461,6 +461,15 @@ static int qemuAssignDeviceDiskAliasFixed(virDomainDiskDefPtr disk)
     return 0;
 }
 
+static int
+qemuDefaultScsiControllerModel(virDomainDefPtr def) {
+    if (STREQ(def->os.arch, "ppc64") &&
+        STREQ(def->os.machine, "pseries")) {
+        return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
+    } else {
+        return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
+    }
+}
 
 /* Our custom -drive naming scheme used with id= */
 static int qemuAssignDeviceDiskAliasCustom(virDomainDiskDefPtr disk)
@@ -2356,14 +2365,26 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef,
                           int *nusbcontroller)
 {
     virBuffer buf = VIR_BUFFER_INITIALIZER;
+    int model;
 
     switch (def->type) {
     case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
-        if (STREQ(domainDef->os.arch, "ppc64") &&
-            STREQ(domainDef->os.machine, "pseries")) {
-            virBufferAddLit(&buf, "spapr-vscsi");
-        } else {
+        model = def->model;
+        if (model == -1 ||
+            model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO) {
+            model = qemuDefaultScsiControllerModel(domainDef);
+        }
+        switch (model) {
+        case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC:
             virBufferAddLit(&buf, "lsi");
+            break;
+        case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI:
+            virBufferAddLit(&buf, "spapr-vscsi");
+            break;
+        default:
+            qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                            _("Unsupported controller model: %s"),
+                            virDomainControllerModelSCSITypeToString(def->model));
         }
         virBufferAsprintf(&buf, ",id=scsi%d", def->idx);
         break;
index 5a1aebd8e51a08dc91f86cbc9f5a1359b10ff41c..5eb7acba5e53ccd386cb7d079fd40618fc76e082 100644 (file)
@@ -490,7 +490,8 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
               "buslogic",
               "lsilogic",
               "lsisas1068",
-              "pvscsi");
+              "pvscsi",
+              "UNUSED ibmvscsi");