[libvirt] [PATCH 3/4] conf: Use existing SCSI hostdev model to create new

John Ferlan jferlan at redhat.com
Mon Dec 18 12:59:05 UTC 2017



On 12/15/2017 11:32 AM, Eric Farman wrote:
> 
> 
> On 12/06/2017 08:08 AM, John Ferlan wrote:
>> In virDomainDefMaybeAddHostdevSCSIcontroller when we add a new
>> controller because someone neglected to add one or we're adding
>> one because the existing one is full, we should copy over the
>> model number from the existing controller since whatever we
>> create should at least have the same characteristics as the one
>> we cannot use because it's full.
>>
>> NB: This affects the existing hostdev-scsi-autogen-address test
>> which would add a default ('lsi') SCSI controller for the various
>> scsi_host's that would create a controller for the hostdev.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>>   src/conf/domain_conf.c                                    | 13
>> ++++++++++++-
>>   tests/qemuxml2xmloutdata/hostdev-scsi-autogen-address.xml |  2 +-
>>   2 files changed, 13 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 66e21c4bd..61b4a0075 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -17689,12 +17689,22 @@
>> virDomainDefMaybeAddHostdevSCSIcontroller(virDomainDefPtr def)
>>       size_t i;
>>       int maxController = -1;
>>       virDomainHostdevDefPtr hostdev;
>> +    virDomainControllerModelSCSI model = -1;
>> +    virDomainControllerModelSCSI newModel = -1;
>>
>>       for (i = 0; i < def->nhostdevs; i++) {
>>           hostdev = def->hostdevs[i];
>>           if (virHostdevIsSCSIDevice(hostdev) &&
>>               (int)hostdev->info->addr.drive.controller >
>> maxController) {
>>               maxController = hostdev->info->addr.drive.controller;
>> +            /* We may be creating a new controller because this one
>> is full.
>> +             * So let's grab the model from it and update the model
>> we're
>> +             * going to add as long as this one isn't undefined. The
>> premise
>> +             * being keeping the same controller model for all SCSI
>> hostdevs. */
>> +            model = virDomainDeviceFindControllerModel(def,
>> hostdev->info,
>> +                                                      
>> VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
>> +            if (model != -1)
>> +                newModel = model;
> 
> What's the harm if the last controller were undefined?  Wouldn't it get
> populated down the road anyway if one were not set at this point (we
> send -1 today, after all).  That could eliminate one of the two
> virDomainControllerModelSCSI variables here, I would think.

Yes, a -1 is passed along which (for now) means a SCSI LSI controller
would be created except for pseries which would generate something
different.

John

> 
> But, either way I think it's fine.
> 
> Reviewed-by: Eric Farman <farman at linux.vnet.ibm.com>
> 
>>           }
>>       }
>>
>> @@ -17702,7 +17712,8 @@
>> virDomainDefMaybeAddHostdevSCSIcontroller(virDomainDefPtr def)
>>           return 0;
>>
>>       for (i = 0; i <= maxController; i++) {
>> -        if (virDomainDefMaybeAddController(def,
>> VIR_DOMAIN_CONTROLLER_TYPE_SCSI, i, -1) < 0)
>> +        if (virDomainDefMaybeAddController(def,
>> VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
>> +                                           i, newModel) < 0)
>>               return -1;
>>       }
>>
>> diff --git a/tests/qemuxml2xmloutdata/hostdev-scsi-autogen-address.xml
>> b/tests/qemuxml2xmloutdata/hostdev-scsi-autogen-address.xml
>> index 8e93056ee..cea212b64 100644
>> --- a/tests/qemuxml2xmloutdata/hostdev-scsi-autogen-address.xml
>> +++ b/tests/qemuxml2xmloutdata/hostdev-scsi-autogen-address.xml
>> @@ -29,7 +29,7 @@
>>         <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>> function='0x1'/>
>>       </controller>
>>       <controller type='pci' index='0' model='pci-root'/>
>> -    <controller type='scsi' index='1'>
>> +    <controller type='scsi' index='1' model='virtio-scsi'>
>>         <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>> function='0x0'/>
>>       </controller>
>>       <input type='mouse' bus='ps2'/>
>>
> 




More information about the libvir-list mailing list