[libvirt] [PATCH v5 01/16] qemu: Split qemuDomainSetSCSIControllerModel

John Ferlan jferlan at redhat.com
Mon Jan 29 17:28:09 UTC 2018



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 at 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




More information about the libvir-list mailing list