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

Ján Tomko jtomko at redhat.com
Thu Jan 22 16:00:38 UTC 2015


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

> 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) {
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150122/bb9f6241/attachment-0001.sig>


More information about the libvir-list mailing list