On 05/15/2017 08:10 AM, Erik Skultety wrote:
Start discovering the mediated devices on the host system and format
the
attributes for the mediated device into the XML. Compared to the parent
device which reports generic information about the abstract mediated
devices types, a child device only reports the type name it has been
instantiated from and the IOMMU group number, since that's device
specific compared to the rest of the info that can be gathered about
mediated devices at the moment.
This patch introduces both the formatting and parsing routines, updates
nodedev.rng schema, adding a testcase as well.
The resulting mdev child device XML:
<device>
<name>mdev_4b20d080_1b54_4048_85b3_a6a62d165c01</name>
<path>/sys/devices/.../4b20d080-1b54-4048-85b3-a6a62d165c01</path>
<parent>pci_0000_06_00_0</parent>
<driver>
<name>vfio_mdev</name>
</driver>
<capability type='mdev'>
<type id='vendor_supplied_type_id'/>
<iommuGroup number='NUM'/>
<capability/>
<device/>
Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
docs/schemas/nodedev.rng | 17 +++++++++
src/conf/node_device_conf.c | 41 +++++++++++++++++++++
src/conf/node_device_conf.h | 8 ++++
src/node_device/node_device_udev.c | 43 +++++++++++++++++++++-
.../mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml | 8 ++++
tests/nodedevxml2xmltest.c | 1 +
6 files changed, 117 insertions(+), 1 deletion(-)
create mode 100644
tests/nodedevschemadata/mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml
[...]
diff --git a/src/conf/node_device_conf.c
b/src/conf/node_device_conf.c
index f26b1ffc7..bdb6c9cf7 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -577,6 +577,10 @@ virNodeDeviceDefFormat(const virNodeDeviceDef *def)
virBufferEscapeString(&buf, "<type>%s</type>\n",
virNodeDevDRMTypeToString(data->drm.type));
break;
case VIR_NODE_DEV_CAP_MDEV:
+ virBufferEscapeString(&buf, "<type id='%s'/>\n",
data->mdev.type);
+ virBufferAsprintf(&buf, "<iommuGroup
number='%u'/>\n",
+ data->mdev.iommuGroupNumber);
+ break;
case VIR_NODE_DEV_CAP_MDEV_TYPES:
case VIR_NODE_DEV_CAP_FC_HOST:
case VIR_NODE_DEV_CAP_VPORTS:
@@ -1643,6 +1647,39 @@ virNodeDevCapSystemParseXML(xmlXPathContextPtr ctxt,
}
+static int
+virNodeDevCapMdevParseXML(xmlXPathContextPtr ctxt,
+ virNodeDeviceDefPtr def,
+ xmlNodePtr node,
+ virNodeDevCapMdevPtr mdev)
+{
+ xmlNodePtr orignode;
+ int ret = -1;
+
+ orignode = ctxt->node;
+ ctxt->node = node;
+
+ if (!(mdev->type = virXPathString("string(./type[1]/@id)", ctxt))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("missing type id attribute for '%s'"),
def->name);
+ goto out;
+ }
+
+ if (virNodeDevCapsDefParseULong("number(./iommuGroup[1]/@number)", ctxt,
+ &mdev->iommuGroupNumber, def,
+ _("missing iommuGroup number atribute for
"
s/atribute/attribute/
Reviewed-by: John Ferlan <jferlan(a)redhat.com>
John
+ "'%s'"),
+ _("invalid iommuGroup number attribute for
"
+ "'%s'")) < 0)
+ goto out;
+
+ ret = 0;
+ out:
+ ctxt->node = orignode;
+ return ret;
+}
+
+
[...]