[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