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@xxxxxxxxxx> > --- > 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@xxxxxxxxxx> John > + "'%s'"), > + _("invalid iommuGroup number attribute for " > + "'%s'")) < 0) > + goto out; > + > + ret = 0; > + out: > + ctxt->node = orignode; > + return ret; > +} > + > + [...] -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list