From: John Ferlan Date: Tue, 30 Jan 2018 19:19:47 +0000 (-0500) Subject: qemu: Introduce qemuDomainSetSCSIControllerModel X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=62f8c947325e5b703a5fb9496b3f05e0e626fc1f;p=libvirt.git qemu: Introduce qemuDomainSetSCSIControllerModel 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). --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6b4bd3cca0..c8123ce59b 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -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: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 5211b4f8a9..75c263015a 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -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 diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index 209b59e0d6..04fb2fc14c 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -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); diff --git a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi-auth.xml b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi-auth.xml index cad0161290..3d0efdcafe 100644 --- a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi-auth.xml +++ b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi-auth.xml @@ -19,7 +19,7 @@
- +
diff --git a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi.xml b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi.xml index b7312ca4f3..28b80a02bb 100644 --- a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi.xml +++ b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi-iscsi.xml @@ -19,7 +19,7 @@
- +
diff --git a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi.xml b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi.xml index 54498aa5c5..545ce3ba8f 100644 --- a/tests/qemuxml2xmloutdata/hostdev-scsi-lsi.xml +++ b/tests/qemuxml2xmloutdata/hostdev-scsi-lsi.xml @@ -19,7 +19,7 @@
- +