[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