On 01/06/2018 12:47 AM, John Ferlan wrote: > Rather than one function serving two purposes, let's split things > up into qemuDomainResetSCSIControllerModel for all current callers > and then add qemuDomainCheckSCSIControllerModel when building the > controller command line to check the capabilities. > > Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx> > --- > src/qemu/qemu_alias.c | 4 +-- > src/qemu/qemu_command.c | 62 ++++++++++++++++++++++++++++++++--- > src/qemu/qemu_domain_address.c | 74 +++++++++--------------------------------- > src/qemu/qemu_domain_address.h | 6 ++-- > 4 files changed, 79 insertions(+), 67 deletions(-) > > diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c > index 37fe2aa80..b65276dd9 100644 > --- a/src/qemu/qemu_alias.c > +++ b/src/qemu/qemu_alias.c > @@ -194,8 +194,8 @@ qemuAssignDeviceDiskAlias(virDomainDefPtr def, > virDomainDeviceFindControllerModel(def, &disk->info, > VIR_DOMAIN_CONTROLLER_TYPE_SCSI); > > - if ((qemuDomainSetSCSIControllerModel(def, qemuCaps, > - &controllerModel)) < 0) > + if ((qemuDomainResetSCSIControllerModel(def, qemuCaps, > + &controllerModel)) < 0) > return -1; > } > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index b8aede32d..5c084ae8c 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -1888,6 +1888,57 @@ qemuCheckIOThreads(const virDomainDef *def, > } > > > +static bool > +qemuBuildCheckSCSIControllerModel(virQEMUCapsPtr qemuCaps, > + int model) > +{ > + 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 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; > + default: > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("Unsupported controller model: %s"), > + virDomainControllerModelSCSITypeToString(model)); > + return false; Or, just have this function take virDomainControllerModelSCSI enum and instead of default have VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST and probably VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO; That way, when new model is added compiler identifies this place for adjustment automatically. > + } > + > + return true; > +} ACK Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list