]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nodedev: add <uuid> element to mdev caps
authorJonathon Jongsma <jjongsma@redhat.com>
Fri, 29 Jan 2021 21:24:10 +0000 (15:24 -0600)
committerJonathon Jongsma <jjongsma@redhat.com>
Wed, 7 Apr 2021 20:14:01 +0000 (15:14 -0500)
It will be useful to be able to specify a particular UUID for a mediated
device when defining the node device. To accomodate that, allow this to
be specified in the xml schema. This patch also parses and formats that
value to the xml, but does not yet use it.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
docs/schemas/nodedev.rng
src/conf/node_device_conf.c
tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml

index 5840dc9f0df3d0b4899fb85dde095df44e1a011f..777227c38ab6ed2cdd762d47a7894bbbec5b2780 100644 (file)
   </define>
 
   <define name="capmdev">
-    <attribute name="type">
-      <value>mdev</value>
-    </attribute>
-    <element name="type">
-      <attribute name="id">
-        <data type="string"/>
+    <interleave>
+      <attribute name="type">
+        <value>mdev</value>
       </attribute>
-    </element>
-    <optional>
-      <element name="iommuGroup">
-        <attribute name="number">
-          <ref name="unsignedInt"/>
+      <element name="type">
+        <attribute name="id">
+          <data type="string"/>
         </attribute>
       </element>
-    </optional>
-    <zeroOrMore>
-      <element name="attr">
-        <attribute name="name"/>
-        <attribute name="value"/>
-      </element>
-    </zeroOrMore>
+      <optional>
+        <element name="iommuGroup">
+          <attribute name="number">
+            <ref name="unsignedInt"/>
+          </attribute>
+        </element>
+      </optional>
+      <optional>
+        <element name="uuid">
+          <ref name="UUID"/>
+        </element>
+      </optional>
+      <zeroOrMore>
+        <element name="attr">
+          <attribute name="name"/>
+          <attribute name="value"/>
+        </element>
+      </zeroOrMore>
+    </interleave>
   </define>
 
   <define name="capccwdev">
index b1739ceb014bc0af42268ad73df3cb20de0bac6d..d167da6171c541fe5db210019e59a8775eb3ea8f 100644 (file)
@@ -527,6 +527,7 @@ virNodeDeviceCapMdevDefFormat(virBufferPtr buf,
     size_t i;
 
     virBufferEscapeString(buf, "<type id='%s'/>\n", data->mdev.type);
+    virBufferEscapeString(buf, "<uuid>%s</uuid>\n", data->mdev.uuid);
     virBufferAsprintf(buf, "<iommuGroup number='%u'/>\n",
                       data->mdev.iommuGroupNumber);
 
@@ -1948,6 +1949,7 @@ virNodeDevCapMdevParseXML(xmlXPathContextPtr ctxt,
     int nattrs = 0;
     g_autofree xmlNodePtr *attrs = NULL;
     size_t i;
+    g_autofree char *uuidstr = NULL;
 
     ctxt->node = node;
 
@@ -1957,6 +1959,18 @@ virNodeDevCapMdevParseXML(xmlXPathContextPtr ctxt,
         return -1;
     }
 
+    if ((uuidstr = virXPathString("string(./uuid[1])", ctxt))) {
+        unsigned char uuidbuf[VIR_UUID_BUFLEN];
+        /* make sure that the provided uuid is valid */
+        if (virUUIDParse(uuidstr, uuidbuf) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Invalid uuid '%s' for new mdev device"), uuidstr);
+            return -1;
+        }
+        mdev->uuid = g_new0(char, VIR_UUID_STRING_BUFLEN);
+        virUUIDFormat(uuidbuf, mdev->uuid);
+    }
+
     /* 'iommuGroup' is optional, only report an error if the supplied value is
      * invalid (-2), not if it's missing (-1) */
     if (virXPathUInt("number(./iommuGroup[1]/@number)",
index 543ad916b7aa57d79599a835ec0c88b79a0adea2..cf7e96625605f88b6d2fe0fd1086e92c553a7988 100644 (file)
@@ -3,6 +3,7 @@
   <parent>0000:00:02.0</parent>
   <capability type='mdev'>
     <type id='i915-GVTg_V5_4'/>
+    <uuid>200f228a-c80a-4d50-bfb7-f5a0e4e34045</uuid>
     <iommuGroup number='0'/>
   </capability>
 </device>
@@ -11,6 +12,7 @@
   <parent>0000:00:02.0</parent>
   <capability type='mdev'>
     <type id='i915-GVTg_V5_4'/>
+    <uuid>de807ffc-1923-4d5f-b6c9-b20ecebc6d4b</uuid>
     <iommuGroup number='0'/>
   </capability>
 </device>
@@ -19,6 +21,7 @@
   <parent>0000:00:02.0</parent>
   <capability type='mdev'>
     <type id='i915-GVTg_V5_8'/>
+    <uuid>435722ea-5f43-468a-874f-da34f1217f13</uuid>
     <iommuGroup number='0'/>
     <attr name='testattr' value='42'/>
   </capability>
@@ -28,6 +31,7 @@
   <parent>matrix</parent>
   <capability type='mdev'>
     <type id='vfio_ap-passthrough'/>
+    <uuid>783e6dbb-ea0e-411f-94e2-717eaad438bf</uuid>
     <iommuGroup number='0'/>
     <attr name='assign_adapter' value='5'/>
     <attr name='assign_adapter' value='6'/>