[libvirt] [PATCH 4/5] qemu: move PCI slot assignment for PIIX3, Q35 into a separate function

Erik Skultety eskultet at redhat.com
Fri Jan 23 12:05:54 UTC 2015



On 01/22/2015 05:00 PM, Ján Tomko wrote:
> On 01/21/2015 05:50 PM, Erik Skultety wrote:
>> In order to be able to test for fully reserved PCI buses, assignment of
>> PCI slots for integrated devices needs to be moved to a separate function.
>> This also might be a good preparation if we decide to add support for
>> other chipsets as well.
>> ---
>>  src/qemu/qemu_command.c | 45 ++++++++++++++++++++++++++++++---------------
>>  1 file changed, 30 insertions(+), 15 deletions(-)
>>
> 
> This should be done before fixing the bug in 3/5, and it also doesn't compile.
> 
> Jan
> 

I thought about this series as a collection, which did compile just
fine, but now I see how silly that was, lesson learned, thank you.

Erik

>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index 99b06ee..dbcc854 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -1494,6 +1494,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
>>              if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, true)))
>>                  goto cleanup;
>>  
>> +            if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
>> +                goto cleanup;
>> +
>>              for (i = 0; i < nbuses; i++) {
>>                  if (qemuDomainPCIBusFullyReserved(&addrs->buses[i]))
>>                      resflags |= 1 << i;
>> @@ -1537,6 +1540,8 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
>>              goto cleanup;
>>  
>>          if (qemuDomainSupportsPCI(def)) {
>> +            if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
>> +                goto cleanup;
>>              if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
>>                  goto cleanup;
>>          }
>> @@ -1996,6 +2001,27 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
>>      return ret;
>>  }
>>  
>> +static int
>> +qemuValidateDevicePCISlotsChipsets(virDomainDefPtr def,
>> +                                   virQEMUCapsPtr qemuCaps,
>> +                                   virDomainPCIAddressSetPtr addrs)
>> +{
>> +    if ((STRPREFIX(def->os.machine, "pc-0.") ||
>> +        STRPREFIX(def->os.machine, "pc-1.") ||
>> +        STRPREFIX(def->os.machine, "pc-i440") ||
>> +        STREQ(def->os.machine, "pc") ||
>> +        STRPREFIX(def->os.machine, "rhel")) &&
>> +        qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) < 0) {
>> +        return -1;
>> +    }
>> +
>> +    if (qemuDomainMachineIsQ35(def) &&
>> +        qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) < 0) {
>> +        return -1;
>> +    }
>> +
>> +    return 0;
>> +}
>>  
>>  /*
>>   * This assigns static PCI slots to all configured devices.
>> @@ -2014,6 +2040,9 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
>>   *  - PIIX3 ISA bridge, IDE controller, something else unknown, USB controller (slot 1)
>>   *  - Video (slot 2)
>>   *
>> + *  - These integrated devices were already added by
>> + *    qemuValidateDevicePCISlotsChipsets invoked right before this function
>> + *
>>   * Incrementally assign slots from 3 onwards:
>>   *
>>   *  - Net
>> @@ -2031,27 +2060,13 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
>>   */
>>  int
>>  qemuAssignDevicePCISlots(virDomainDefPtr def,
>> -                         virQEMUCapsPtr qemuCaps,
>> +                         virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
>>                           virDomainPCIAddressSetPtr addrs)
>>  {
>>      size_t i, j;
>>      virDomainPCIConnectFlags flags;
>>      virDevicePCIAddress tmp_addr;
>>  
>> -    if ((STRPREFIX(def->os.machine, "pc-0.") ||
>> -        STRPREFIX(def->os.machine, "pc-1.") ||
>> -        STRPREFIX(def->os.machine, "pc-i440") ||
>> -        STREQ(def->os.machine, "pc") ||
>> -        STRPREFIX(def->os.machine, "rhel")) &&
>> -        qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) < 0) {
>> -        goto error;
>> -    }
>> -
>> -    if (qemuDomainMachineIsQ35(def) &&
>> -        qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) < 0) {
>> -        goto error;
>> -    }
>> -
>>      /* PCI controllers */
>>      for (i = 0; i < def->ncontrollers; i++) {
>>          if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
>>
> 
> 
> 
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list