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

Shivaprasad bhat shivaprasadbhat at gmail.com
Tue Jun 27 08:23:12 UTC 2017


Hi Andrea,

We need to also adjust the memlock limits along with this patch.

I have the changes here if you want to append to this patch.

https://paste.fedoraproject.org/paste/JrI4stQTIYiaecuXPyXh8g

Thanks,
Shivaprasad


On Fri, Jun 23, 2017 at 8:33 PM, Andrea Bolognani <abologna at redhat.com>
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 at redhat.com>
> ---
>  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 = virDomainControllerPCIModelNam
> eTypeToString(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 */
> --
> 2.7.5
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170627/1bbfceea/attachment-0001.htm>


More information about the libvir-list mailing list