[libvirt] [PATCH v2 12/24] conf: Parse and format <target index='...'/>

Andrea Bolognani abologna at redhat.com
Fri Jun 16 09:48:56 UTC 2017


Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
 docs/schemas/domaincommon.rng |  5 +++++
 src/conf/domain_conf.c        | 24 ++++++++++++++++++++++++
 src/conf/domain_conf.h        |  1 +
 3 files changed, 30 insertions(+)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 4950ddc..7234b49 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1997,6 +1997,11 @@
                   </attribute>
                 </optional>
                 <optional>
+                  <attribute name='index'>
+                    <ref name='uint8'/>
+                  </attribute>
+                </optional>
+                <optional>
                   <element name='node'>
                     <ref name='unsignedInt'/>
                   </element>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6ee7696..107cdba 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1866,6 +1866,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:
@@ -9031,6 +9032,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
             goto error;
         }
         def->idx = idxVal;
+        VIR_FREE(idx);
     }
 
     cur = node->children;
@@ -9062,6 +9064,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
                 chassis = virXMLPropString(cur, "chassis");
                 port = virXMLPropString(cur, "port");
                 busNr = virXMLPropString(cur, "busNr");
+                idx = virXMLPropString(cur, "index");
                 processedTarget = true;
             }
         }
@@ -9280,6 +9283,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 target index '%s' in PCI controller"),
+                               idx);
+                goto error;
+            }
+            if (def->opts.pciopts.idx < 0 ||
+                def->opts.pciopts.idx > 31) {
+                virReportError(VIR_ERR_XML_ERROR,
+                               _("PCI controller target index '%s' out of "
+                                 "range - must be 0-31"),
+                               idx);
+                goto error;
+            }
+        }
         if (numaNode >= 0)
             def->opts.pciopts.numaNode = numaNode;
         break;
@@ -21680,6 +21700,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) {
             virBufferAddLit(&childBuf, "<target");
             if (def->opts.pciopts.chassisNr != -1)
@@ -21694,6 +21715,9 @@ virDomainControllerDefFormat(virBufferPtr buf,
             if (def->opts.pciopts.busNr != -1)
                 virBufferAsprintf(&childBuf, " busNr='%d'",
                                   def->opts.pciopts.busNr);
+            if (def->opts.pciopts.idx != -1)
+                virBufferAsprintf(&childBuf, " index='%d'",
+                                  def->opts.pciopts.idx);
             if (def->opts.pciopts.numaNode == -1) {
                 virBufferAddLit(&childBuf, "/>\n");
             } else {
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index e67b6fd..3713b7f 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -785,6 +785,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
      */
-- 
2.7.5




More information about the libvir-list mailing list