Re: [PATCH v3 18/26] qemu: Use multiple PHBs for pSeries guests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The subject line implies (to me) that this patch somehow automagically
creates multiple PHBs for the domain. It looks like what it does is to
add the proper commandline args to the qemu command when multiple PHBs
have already been added to the config.

As for the functionality:

Reviewed-by: Laine Stump <laine@xxxxxxxxx>

On 06/23/2017 11:03 AM, Andrea Bolognani wrote:
> Additional PHBs (pci-root controllers) will be created for
> the guest using the spapr-pci-host-bridge QEMU device, if
> available; the implicit default PHB, while present in the
> guest configuration, will be skipped.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1431193
> 
> Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx>
> ---
>  src/qemu/qemu_command.c | 47 ++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 44 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index dba2519..fb0beed 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -3164,6 +3164,40 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
>                                   def->opts.pciopts.numaNode);
>              break;
>          case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> +            if (def->opts.pciopts.modelName == VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_NONE ||
> +                def->opts.pciopts.idx == -1) {
> +                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                               _("autogenerated pci-root options not set"));
> +                goto error;
> +            }
> +
> +            /* Skip the implicit one */
> +            if (def->opts.pciopts.idx == 0)
> +                goto done;
> +
> +            modelName = virDomainControllerPCIModelNameTypeToString(def->opts.pciopts.modelName);
> +            if (!modelName) {
> +                virReportError(VIR_ERR_INTERNAL_ERROR,
> +                               _("unknown pci-root model name value %d"),
> +                               def->opts.pciopts.modelName);
> +                goto error;
> +            }
> +            if (def->opts.pciopts.modelName != VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                               _("PCI controller model name '%s' is not valid for a pci-root"),
> +                               modelName);
> +                goto error;
> +            }
> +            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE)) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("the spapr-pci-host-bridge controller "
> +                                 "is not supported in this QEMU binary"));
> +                goto error;
> +            }
> +            virBufferAsprintf(&buf, "%s,index=%d,id=%s",
> +                              modelName, def->opts.pciopts.idx,
> +                              def->info.alias);
> +            break;
>          case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
>          case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
>              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> @@ -3213,6 +3247,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
>      if (virBufferCheckError(&buf) < 0)
>          goto error;
>  
> + done:
>      *devstr = virBufferContentAndReset(&buf);
>      return 0;
>  
> @@ -3270,10 +3305,16 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd,
>                  continue;
>              }
>  
> -            /* skip pci-root/pcie-root */
> +            /* skip pcie-root */
>              if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
> -                (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT ||
> -                 cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT))
> +                cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT)
> +                continue;
> +
> +            /* Skip pci-root, except for pSeries guests (which actually
> +             * support more than one PCI Host Bridge per guest) */
> +            if (!qemuDomainIsPSeries(def) &&
> +                cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
> +                cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT)
>                  continue;
>  
>              /* first SATA controller on Q35 machines is implicit */
> 

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux