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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list