On 06/02/2017 12:07 PM, Andrea Bolognani wrote: > --- > src/conf/domain_conf.c | 24 ++++++++++++++++++++++++ > src/conf/domain_conf.h | 1 + > 2 files changed, 25 insertions(+) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index d5dff8e..deb0dce 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -1803,6 +1803,7 @@ virDomainControllerDefNew(virDomainControllerType type) > def->opts.pciopts.chassis = -1; > def->opts.pciopts.port = -1; > def->opts.pciopts.busNr = -1; > + def->opts.pciopts.idx = -1; > def->opts.pciopts.numaNode = -1; > break; > case VIR_DOMAIN_CONTROLLER_TYPE_IDE: > @@ -8909,6 +8910,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, > goto error; > } > def->idx = idxVal; > + VIR_FREE(idx); > } > > cur = node->children; > @@ -8940,6 +8942,7 @@ virDomainControllerDefParseXML(xmlNodePtr node, > chassis = virXMLPropString(cur, "chassis"); > port = virXMLPropString(cur, "port"); > busNr = virXMLPropString(cur, "busNr"); > + idx = virXMLPropString(cur, "index"); > processedTarget = true; > } > } > @@ -9155,6 +9158,23 @@ virDomainControllerDefParseXML(xmlNodePtr node, > goto error; > } > } > + if (idx) { > + if (virStrToLong_i(idx, NULL, 0, > + &def->opts.pciopts.idx) < 0) { > + virReportError(VIR_ERR_XML_ERROR, > + _("Invalid index '%s' in PCI controller"), You should probably say "target index" to differentiate it from the toplevel index. > + idx); > + goto error; > + } > + if (def->opts.pciopts.idx < 0 || > + def->opts.pciopts.idx > 31) { > + virReportError(VIR_ERR_XML_ERROR, > + _("PCI controller index '%s' out of range " > + "- must be 0-31"), Same here. Other than that, what about an xml2xml test case? (as well as combining with the previous patch, and adding a sentence to formatdomain.html.in) > + idx); > + goto error; > + } > + } > if (numaNode >= 0) > def->opts.pciopts.numaNode = numaNode; > break; > @@ -21413,6 +21433,7 @@ virDomainControllerDefFormat(virBufferPtr buf, > def->opts.pciopts.chassis != -1 || > def->opts.pciopts.port != -1 || > def->opts.pciopts.busNr != -1 || > + def->opts.pciopts.idx != -1 || > def->opts.pciopts.numaNode != -1) > pciTarget = true; > break; > @@ -21453,6 +21474,9 @@ virDomainControllerDefFormat(virBufferPtr buf, > if (def->opts.pciopts.busNr != -1) > virBufferAsprintf(buf, " busNr='%d'", > def->opts.pciopts.busNr); > + if (def->opts.pciopts.idx != -1) > + virBufferAsprintf(buf, " index='%d'", > + def->opts.pciopts.idx); > if (def->opts.pciopts.numaNode == -1) { > virBufferAddLit(buf, "/>\n"); > } else { > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 83e0672..5a21289 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -780,6 +780,7 @@ struct _virDomainPCIControllerOpts { > int chassis; > int port; > int busNr; /* used by pci-expander-bus, -1 == unspecified */ > + int idx; /* used by spapr-pci-host-bridge, -1 == unspecified */ > /* numaNode is a *subelement* of target (to match existing > * item in memory target config) -1 == unspecified > */ > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list