mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
qemu: Split qemuDomainSetSCSIControllerModel
Rather than one function serving two purposes, let's split out the else condition which is checking whether the model can be used during command line building based on the capabilities. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
7b0ea999fc
commit
e37540f459
@ -1888,6 +1888,68 @@ qemuCheckIOThreads(const virDomainDef *def,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @qemuCaps: QEMU capabilities
|
||||
* @model: SCSI model to check
|
||||
*
|
||||
* Using the @qemuCaps, let's ensure the provided @model can be supported
|
||||
*
|
||||
* Returns true if acceptible, false otherwise with error message set.
|
||||
*/
|
||||
static bool
|
||||
qemuBuildCheckSCSIControllerModel(virQEMUCapsPtr qemuCaps,
|
||||
int model)
|
||||
{
|
||||
switch ((virDomainControllerModelSCSI) model) {
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI 53C895A SCSI controller"));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"virtio scsi controller"));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI:
|
||||
/*TODO: need checking work here if necessary */
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_MPTSAS1068)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI SAS1068 (MPT Fusion) controller"));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_MEGASAS)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI SAS1078 (MegaRAID) controller"));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO:
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC:
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI:
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Unsupported controller model: %s"),
|
||||
virDomainControllerModelSCSITypeToString(model));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
qemuBuildDriveDevStr(const virDomainDef *def,
|
||||
virDomainDiskDefPtr disk,
|
||||
@ -2665,6 +2727,9 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
|
||||
if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
|
||||
if ((qemuDomainSetSCSIControllerModel(domainDef, qemuCaps, &model)) < 0)
|
||||
return -1;
|
||||
|
||||
if (!qemuBuildCheckSCSIControllerModel(qemuCaps, model))
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI &&
|
||||
|
@ -40,66 +40,34 @@ VIR_LOG_INIT("qemu.qemu_domain_address");
|
||||
#define VIO_ADDR_NVRAM 0x3000ul
|
||||
|
||||
|
||||
/**
|
||||
* @def: Domain definition
|
||||
* @qemuCaps: qemu capabilities
|
||||
* @model: model to either return or adjust
|
||||
*
|
||||
* If the @model is already defined, return it immediately; otherwise,
|
||||
* based on the @qemuCaps set the @model value to the default value.
|
||||
*
|
||||
* Returns @model on success, -1 on failure with error set.
|
||||
*/
|
||||
int
|
||||
qemuDomainSetSCSIControllerModel(const virDomainDef *def,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
int *model)
|
||||
{
|
||||
if (*model > 0) {
|
||||
switch (*model) {
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI 53C895A SCSI controller"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"virtio scsi controller"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI:
|
||||
/*TODO: need checking work here if necessary */
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_MPTSAS1068)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI SAS1068 (MPT Fusion) controller"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_MEGASAS)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("This QEMU doesn't support "
|
||||
"the LSI SAS1078 (MegaRAID) controller"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Unsupported controller model: %s"),
|
||||
virDomainControllerModelSCSITypeToString(*model));
|
||||
return -1;
|
||||
}
|
||||
if (*model > 0)
|
||||
return 0;
|
||||
|
||||
if (qemuDomainIsPSeries(def)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
|
||||
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
|
||||
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI;
|
||||
} else {
|
||||
if (qemuDomainIsPSeries(def)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
|
||||
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
|
||||
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) {
|
||||
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI;
|
||||
} else {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Unable to determine model for scsi controller"));
|
||||
return -1;
|
||||
}
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Unable to determine model for scsi controller"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user