[libvirt] [PATCH v4 5/6] nodedev: Introduce mdev capability for mediated devices
John Ferlan
jferlan at redhat.com
Wed May 17 21:32:14 UTC 2017
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 at 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 at redhat.com>
John
> + "'%s'"),
> + _("invalid iommuGroup number attribute for "
> + "'%s'")) < 0)
> + goto out;
> +
> + ret = 0;
> + out:
> + ctxt->node = orignode;
> + return ret;
> +}
> +
> +
[...]
More information about the libvir-list
mailing list