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@redhat.com>
---
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;
+ }
+
+ return true;
+}
+
+
char *
qemuBuildDriveDevStr(const virDomainDef *def,
virDomainDiskDefPtr disk,
@@ -1983,8 +2034,8 @@ qemuBuildDriveDevStr(const virDomainDef *def,
controllerModel =
virDomainDeviceFindControllerModel(def, &disk->info,
VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
- if ((qemuDomainSetSCSIControllerModel(def, qemuCaps,
- &controllerModel)) < 0)
+ if ((qemuDomainResetSCSIControllerModel(def, qemuCaps,
+ &controllerModel)) < 0)
goto error;
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
@@ -2663,7 +2714,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
*devstr = NULL;
if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
- if ((qemuDomainSetSCSIControllerModel(domainDef, qemuCaps, &model)) < 0)
+ if ((qemuDomainResetSCSIControllerModel(domainDef, qemuCaps, &model)) < 0)
+ return -1;
+
+ if (!qemuBuildCheckSCSIControllerModel(qemuCaps, model))
return -1;
}
@@ -5084,7 +5138,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
model = virDomainDeviceFindControllerModel(def, dev->info,
VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
- if (qemuDomainSetSCSIControllerModel(def, qemuCaps, &model) < 0)
+ if (qemuDomainResetSCSIControllerModel(def, qemuCaps, &model) < 0)
goto error;
if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) {
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 6e7561d39..e3c1760d8 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -41,65 +41,23 @@ VIR_LOG_INIT("qemu.qemu_domain_address");
int
-qemuDomainSetSCSIControllerModel(const virDomainDef *def,
- virQEMUCapsPtr qemuCaps,
- int *model)
+qemuDomainResetSCSIControllerModel(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;
@@ -230,7 +188,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
model = cont->model;
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
- if (qemuDomainSetSCSIControllerModel(def, qemuCaps, &model) < 0)
+ if (qemuDomainResetSCSIControllerModel(def, qemuCaps, &model) < 0)
goto cleanup;
}
diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h
index e951a4c88..5a2cbe39d 100644
--- a/src/qemu/qemu_domain_address.h
+++ b/src/qemu/qemu_domain_address.h
@@ -28,9 +28,9 @@
# include "qemu_conf.h"
# include "qemu_capabilities.h"
-int qemuDomainSetSCSIControllerModel(const virDomainDef *def,
- virQEMUCapsPtr qemuCaps,
- int *model);
+int qemuDomainResetSCSIControllerModel(const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps,
+ int *model);
int qemuDomainAssignAddresses(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
--
2.13.6
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
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@redhat.com> > --- > 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@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 01/28/2018 03:48 AM, Michal Privoznik wrote: > 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@redhat.com> >> --- >> 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) { Change to: 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; >> + default: Change to: 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; > > 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. > NB: Went with cast-ing the switch rather than changing from int model to virDomainControllerModelSCSI model - mainly because the callers define parameter as int... >> + } >> + >> + return true; >> +} > > ACK > > Michal > Tks - John -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.