<div dir="ltr">Hi Andrea,<div><br></div><div>We need to also adjust the memlock limits along with this patch. </div><div><br></div><div>I have the changes here if you want to append to this patch.</div><div><br></div><div><a href="https://paste.fedoraproject.org/paste/JrI4stQTIYiaecuXPyXh8g">https://paste.fedoraproject.org/paste/JrI4stQTIYiaecuXPyXh8g</a></div><div><br></div><div>Thanks,</div><div>Shivaprasad</div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 23, 2017 at 8:33 PM, Andrea Bolognani <span dir="ltr"><<a href="mailto:abologna@redhat.com" target="_blank">abologna@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Additional PHBs (pci-root controllers) will be created for<br>
the guest using the spapr-pci-host-bridge QEMU device, if<br>
available; the implicit default PHB, while present in the<br>
guest configuration, will be skipped.<br>
<br>
Resolves: <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1431193" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/<wbr>show_bug.cgi?id=1431193</a><br>
<br>
Signed-off-by: Andrea Bolognani <<a href="mailto:abologna@redhat.com">abologna@redhat.com</a>><br>
---<br>
 src/qemu/qemu_command.c | 47 ++++++++++++++++++++++++++++++<wbr>++++++++++++++---<br>
 1 file changed, 44 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c<br>
index dba2519..fb0beed 100644<br>
--- a/src/qemu/qemu_command.c<br>
+++ b/src/qemu/qemu_command.c<br>
@@ -3164,6 +3164,40 @@ qemuBuildControllerDevStr(<wbr>const virDomainDef *domainDef,<br>
                                  def->opts.pciopts.numaNode);<br>
             break;<br>
         case VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCI_ROOT:<br>
+            if (def->opts.pciopts.modelName == VIR_DOMAIN_CONTROLLER_PCI_<wbr>MODEL_NAME_NONE ||<br>
+                def->opts.pciopts.idx == -1) {<br>
+                virReportError(VIR_ERR_<wbr>INTERNAL_ERROR, "%s",<br>
+                               _("autogenerated pci-root options not set"));<br>
+                goto error;<br>
+            }<br>
+<br>
+            /* Skip the implicit one */<br>
+            if (def->opts.pciopts.idx == 0)<br>
+                goto done;<br>
+<br>
+            modelName = virDomainControllerPCIModelNam<wbr>eTypeToString(def->opts.<wbr>pciopts.modelName);<br>
+            if (!modelName) {<br>
+                virReportError(VIR_ERR_<wbr>INTERNAL_ERROR,<br>
+                               _("unknown pci-root model name value %d"),<br>
+                               def->opts.pciopts.modelName);<br>
+                goto error;<br>
+            }<br>
+            if (def->opts.pciopts.modelName != VIR_DOMAIN_CONTROLLER_PCI_<wbr>MODEL_NAME_SPAPR_PCI_HOST_<wbr>BRIDGE) {<br>
+                virReportError(VIR_ERR_CONFIG_<wbr>UNSUPPORTED,<br>
+                               _("PCI controller model name '%s' is not valid for a pci-root"),<br>
+                               modelName);<br>
+                goto error;<br>
+            }<br>
+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPAPR_PCI_<wbr>HOST_BRIDGE)) {<br>
+                virReportError(VIR_ERR_CONFIG_<wbr>UNSUPPORTED, "%s",<br>
+                               _("the spapr-pci-host-bridge controller "<br>
+                                 "is not supported in this QEMU binary"));<br>
+                goto error;<br>
+            }<br>
+            virBufferAsprintf(&buf, "%s,index=%d,id=%s",<br>
+                              modelName, def->opts.pciopts.idx,<br>
+                              def->info.alias);<br>
+            break;<br>
         case VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCIE_ROOT:<br>
         case VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCI_LAST:<br>
             virReportError(VIR_ERR_<wbr>INTERNAL_ERROR, "%s",<br>
@@ -3213,6 +3247,7 @@ qemuBuildControllerDevStr(<wbr>const virDomainDef *domainDef,<br>
     if (virBufferCheckError(&buf) < 0)<br>
         goto error;<br>
<br>
+ done:<br>
     *devstr = virBufferContentAndReset(&buf)<wbr>;<br>
     return 0;<br>
<br>
@@ -3270,10 +3305,16 @@ qemuBuildControllerDevCommandL<wbr>ine(virCommandPtr cmd,<br>
                 continue;<br>
             }<br>
<br>
-            /* skip pci-root/pcie-root */<br>
+            /* skip pcie-root */<br>
             if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&<br>
-                (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCI_ROOT ||<br>
-                 cont->model == VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCIE_ROOT))<br>
+                cont->model == VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCIE_ROOT)<br>
+                continue;<br>
+<br>
+            /* Skip pci-root, except for pSeries guests (which actually<br>
+             * support more than one PCI Host Bridge per guest) */<br>
+            if (!qemuDomainIsPSeries(def) &&<br>
+                cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&<br>
+                cont->model == VIR_DOMAIN_CONTROLLER_MODEL_<wbr>PCI_ROOT)<br>
                 continue;<br>
<br>
             /* first SATA controller on Q35 machines is implicit */<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.7.5<br>
<br>
--<br>
libvir-list mailing list<br>
<a href="mailto:libvir-list@redhat.com">libvir-list@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/libvir-list" rel="noreferrer" target="_blank">https://www.redhat.com/<wbr>mailman/listinfo/libvir-list</a><br>
</font></span></blockquote></div><br></div></div>