[libvirt] [PATCH 04/13] qemu: restructure qemuAssignDeviceControllerAlias

Laine Stump laine at laine.org
Mon May 11 21:42:04 UTC 2015


On 05/08/2015 01:42 PM, John Ferlan wrote:
>
> On 05/08/2015 01:17 PM, Laine Stump wrote:
>> On 05/08/2015 12:51 PM, John Ferlan wrote:
>>> On 05/05/2015 02:03 PM, Laine Stump wrote:
>>>> No functional change, just rearrange this function and pass in full
>>>> domain definition to make it simpler to add exceptions.
>>>> ---
>>>>  src/qemu/qemu_command.c | 32 ++++++++++++++++++++++----------
>>>>  src/qemu/qemu_command.h |  2 +-
>>>>  src/qemu/qemu_hotplug.c |  4 ++--
>>>>  3 files changed, 25 insertions(+), 13 deletions(-)
>>>>
>>>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>>>> index b76bd98..340478c 100644
>>>> --- a/src/qemu/qemu_command.c
>>>> +++ b/src/qemu/qemu_command.c
>>>> @@ -1031,22 +1031,34 @@ qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redir
>>>>  
>>>>  
>>>>  int
>>>> -qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller)
>>>> +qemuAssignDeviceControllerAlias(ATTRIBUTE_UNUSED virDomainDefPtr def,
>>> ?? Not using it now or in this series to add exceptions, so is there
>>> really a need for it?
>> Patch 6 - add exceptions for primate ide/sata controllers.
>>
> oh - right... but I was wondering why no compiler complaint on the
> ATTRIBUTE_UNUSED... Perhaps it's "ordering related"...
>
> That is should it be:
>
> virDomainDefPtr def ATTRIBUTE_UNUSED,

Okay, right. Not sure why I put it in that order.

>
> here... then in patch 6 it gets removed...
>
> That's why my eyes locked onto...
>
>
>>>> +                                virDomainControllerDefPtr controller)
>>>>  {
>>>> -    const char *prefix = virDomainControllerTypeToString(controller->type);
>>>> +    int ret = 0;
>>>> +
>>>> +    VIR_FREE(controller->info.alias);
>>>>  
>>>> -    if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
>>>> -        /* only pcie-root uses a different naming convention
>>>> -         * ("pcie.0"), because it is hardcoded that way in qemu. All
>>>> -         * other buses use the consistent "pci.%u".
>>>> +    switch (controller->type) {
>>> Similar to 3/13
>>>
>>> s/(/((virDomainControllerType)/
>>>
>>>> +    case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
>>>> +        /* pcie-root uses a different naming convention ("pcie.0"),
>>>> +         * because it is hardcoded that way in qemu. All other PCI
>>>> +         * buses use the consistent "pci.%u".
>>>>           */
>>>>          if (controller->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT)
>>>> -            return virAsprintf(&controller->info.alias, "pcie.%d", controller->idx);
>>>> +            ret = virAsprintf(&controller->info.alias, "pcie.%d", controller->idx);
>>>>          else
>>>> -            return virAsprintf(&controller->info.alias, "pci.%d", controller->idx);
>>>> +            ret = virAsprintf(&controller->info.alias, "pci.%d", controller->idx);
>>>> +        break;
>>>> +    default:
>>> Change default to:
>>>
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_IDE:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_USB:
>>>         ret = virAsprintf(&controller->info.alias, "%s%d",
>>>                           virDomainControllerTypeToString(controller->type),
>>>                           controller->idx);
>>>         break;
>>>
>>>     case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
>>>         Some sort of virReportError...
>>>         ret = -1;
>>>> +        break;
>>>>      }
>>>>  
>>>> -    return virAsprintf(&controller->info.alias, "%s%d", prefix, controller->idx);
>>>> +    /* catchall for anything that wasn't an exception */
>>>> +    if (ret == 0 && !controller->info.alias)
>>>> +        ret = virAsprintf(&controller->info.alias, "%s%d",
>>>> +                          virDomainControllerTypeToString(controller->type),
>>>> +                          controller->idx);
>>> Thus removing the need for this ^^^^
>> That won't work, because the cases for IDE and SATA don't always set the
>> alias (they only set it or machinetypes and controller indexes where it
>> needs to be an exception).
>>
> Huh?   Patch 6 has those exceptions, but the way I'm reading how you
> wrote the code an alias would be assigned (either "ide.%d" or "sata.%d")
> because you'd fall into the catchall code as ret would be 0 and
> info.alias would be NULL.

Correct. I was saying that removing the catchall bit wouldn't work
because it would be needed when it was IDE/SATA but not primary.

Anyway, I've decided that I agree with your later asessment that, since
this is for exceptions, I should just retain the if .... else if ...
else structure of the original rather than change it to a switch. And
since I'm doing that, I'm merging the addition of argument(s) (turns out
I need qemuCaps in addition to DomainDef) into a single patch that adds
the exceptions for primary sata and ide controllers.





More information about the libvir-list mailing list