]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuDomainSetSCSIControllerModel
authorJohn Ferlan <jferlan@redhat.com>
Tue, 30 Jan 2018 19:19:47 +0000 (14:19 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 31 Jan 2018 16:32:04 +0000 (11:32 -0500)
During post parse processing, let's force setting the controller
model to default value if not already set for defined controllers
(e.g. the non implicit ones).

src/qemu/qemu_domain.c
src/qemu/qemu_domain_address.c
src/qemu/qemu_domain_address.h
tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi-auth.xml
tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi.xml
tests/qemuxml2xmloutdata/hostdev-scsi-lsi.xml

index 6b4bd3cca0a2a15019340a725f32ef85da11117a..c8123ce59bc433235b70eed725b38761bfe23881 100644 (file)
@@ -4251,11 +4251,9 @@ qemuDomainControllerDefPostParse(virDomainControllerDefPtr cont,
 {
     switch ((virDomainControllerType)cont->type) {
     case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
-        /* set the default SCSI controller model for S390 arches */
-        if (cont->model == -1 &&
-            ARCH_IS_S390(def->os.arch)) {
-            cont->model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI;
-        }
+        /* Set the default SCSI controller model if not already set */
+        if (qemuDomainSetSCSIControllerModel(def, cont, qemuCaps) < 0)
+            return -1;
         break;
 
     case VIR_DOMAIN_CONTROLLER_TYPE_USB:
index 5211b4f8a96bb043707c723a5dd39c2d0b1aaf27..75c263015a98ccf937cb6ed871c945d1c37f6370 100644 (file)
@@ -60,6 +60,8 @@ qemuDomainGetSCSIControllerModel(const virDomainDef *def,
 
     if (qemuDomainIsPSeries(def))
         return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
+    else if (ARCH_IS_S390(def->os.arch))
+        return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI;
     else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI))
         return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
     else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI))
@@ -72,6 +74,31 @@ qemuDomainGetSCSIControllerModel(const virDomainDef *def,
 }
 
 
+/**
+ * @def: Domain definition
+ * @cont: Domain controller def
+ * @qemuCaps: qemu capabilities
+ *
+ * Set the controller model based on the existing value and the
+ * capabilities if possible.
+ *
+ * Returns 0 on success, -1 on failure with error set.
+ */
+int
+qemuDomainSetSCSIControllerModel(const virDomainDef *def,
+                                 virDomainControllerDefPtr cont,
+                                 virQEMUCapsPtr qemuCaps)
+{
+    int model = qemuDomainGetSCSIControllerModel(def, cont, qemuCaps);
+
+    if (model < 0)
+        return -1;
+
+    cont->model = model;
+    return 0;
+}
+
+
 /**
  * @def: Domain definition
  * @info: Domain device info
index 209b59e0d6d8ebaf7fdcb98547aa4d3644352398..04fb2fc14ce54c7730cba1cbff37af94af43c7ab 100644 (file)
@@ -32,6 +32,10 @@ int qemuDomainGetSCSIControllerModel(const virDomainDef *def,
                                      const virDomainControllerDef *cont,
                                      virQEMUCapsPtr qemuCaps);
 
+int qemuDomainSetSCSIControllerModel(const virDomainDef *def,
+                                     virDomainControllerDefPtr cont,
+                                     virQEMUCapsPtr qemuCaps);
+
 int qemuDomainFindSCSIControllerModel(const virDomainDef *def,
                                       virDomainDeviceInfoPtr info,
                                       virQEMUCapsPtr qemuCaps);
index cad01612906568b41789c480d5630f6f26b5e791..3d0efdcafee006e9939bb83df00959018c2a3d71 100644 (file)
@@ -19,7 +19,7 @@
       <target dev='hda' bus='ide'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
     </disk>
-    <controller type='scsi' index='0'>
+    <controller type='scsi' index='0' model='lsilogic'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </controller>
     <controller type='usb' index='0'>
index b7312ca4f338a8a530c8ab578a69cb8db8c77d12..28b80a02bb5d633597fa51f4e06acaa6b4f4314b 100644 (file)
@@ -19,7 +19,7 @@
       <target dev='hda' bus='ide'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
     </disk>
-    <controller type='scsi' index='0'>
+    <controller type='scsi' index='0' model='lsilogic'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </controller>
     <controller type='usb' index='0'>
index 54498aa5c5ab6e5dfb4595080cf09013ef40ef8c..545ce3ba8f33b56563763c8da9256b9c4ee8c4d4 100644 (file)
@@ -19,7 +19,7 @@
       <target dev='hda' bus='ide'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
     </disk>
-    <controller type='scsi' index='0'>
+    <controller type='scsi' index='0' model='lsilogic'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </controller>
     <controller type='usb' index='0'>