Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
docs/drvnodedev.html.in | 164 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 162 insertions(+), 2 deletions(-)
diff --git a/docs/drvnodedev.html.in b/docs/drvnodedev.html.in
index ed185c3df..6dece3806 100644
--- a/docs/drvnodedev.html.in
+++ b/docs/drvnodedev.html.in
@@ -71,7 +71,7 @@
<code>storage</code> (<span class="since">Since
1.0.4</span>),
<code>scsi_generic</code> (<span
class="since">Since 1.0.7</span>),
<code>drm</code> (<span class="since">Since
3.1.0</span>), and
- <code>mdev</code> (<span class="since">Since
3.2.0</span>).
+ <code>mdev</code> (<span class="since">Since
3.3.0</span>).
This element can be nested in which case it further specifies a
device's capability. Refer to specific device types to see more values
for the <code>type</code> attribute which are exclusive.
@@ -168,7 +168,7 @@
</capability></pre>
<p>
A SR-IOV child device on the other hand, would then report its top level
- capability type as a physical function instead:
+ capability type as <code>phys_function</code> instead:
</p>
<pre>
@@ -180,5 +180,165 @@
...
<device></pre>
+ <h3><a name="MDEVCap">MDEV capability</a></h3>
+ <p>
+ A PCI device capable of creating mediated devices will include a nested
+ capability mdev which enumerates all the supported mdev types on the
+ physical device, along with the type attributes available through sysfs:
+ </p>
+
+ <dl>
+ <dt><code>type</code></dt>
+ <dd>
+ This element describes a mediated device type which acts as an
+ abstract template defining a resource allocation for instances of this
+ device type. The element has one attribute <code>id</code> which
holds
+ an official vendor-supplied identifier for the type.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+
+ <dt><code>name</code></dt>
+ <dd>
+ The <code>name</code> element holds a vendor-supplied code name for
+ the given mediated device type. This is an optional element.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+
+ <dt><code>deviceAPI</code></dt>
+ <dd>
+ The value of this element describes how an instance of the given type
+ will be presented to the guest by the VFIO framework.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+
+ <dt><code>availableInstances</code></dt>
+ <dd>
+ This element reports the current state of resource allocation. In other
+ words, how many instances of the given type can still be successfully
+ created on the physical device.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+ </dl>
+
+ <p>
+ For a more info about mediated devices, refer to the
+ <a href="#MDEV">paragraph below</a>.
+ </p>
+
+<pre>
+<device>
+...
+ <driver>
+ <name>nvidia</name>
+ </driver>
+ <capability type='pci'>
+...
+ <capability type='mdev'>
+ <type id='nvidia-11'>
+ <name>GRID M60-0B</name>
+ <deviceAPI>vfio-pci</deviceAPI>
+ <availableInstances>16</availableInstances>
+ </type>
+ <!-- Here would come the rest of the available mdev types -->
+ </capability>
+...
+ </capability>
+</device></pre>
+
+ <h2><a name="MDEV">Mediated devices
(MDEVs)</a></h2>
+ <p>
+ Mediated devices (<span class="since">Since 3.3.0</span>) are
software
+ devices defining resource allocation on the backing physical device which
+ in turn allows the parent physical device's resources to be divided into
+ several mediated devices, thus sharing the physical device's performance
+ among multiple guests. Unlike SR-IOV however, where a PCIe device appears
+ as multiple separate PCIe devices on the host's PCI bus, mediated devices
+ only appear on the mdev virtual bus. Therefore, no detach/reattach
+ procedure from/to the host driver procedure is involved even though
+ mediated devices are used in a direct device assignment manner.<br/>
+
+ The following sub-elements and attributes are exposed within the
+ <code>capability</code> element:
+ </p>
+
+ <dl>
+ <dt><code>type</code></dt>
+ <dd>
+ This element describes a mediated device type which acts as an
+ abstract template defining a resource allocation for instances of this
+ device type. The element has one attribute <code>id</code> which
holds
+ an official vendor-supplied identifier for the type.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+
+ <dt><code>iommuGroup</code></dt>
+ <dd>
+ This element supports a single attribute <code>number</code> which
holds
+ the IOMMU group number the mediated device belongs to.
+ <span class="since">Since 3.3.0</span>
+ </dd>
+ </dl>
+
+ <h3>Example of a mediated device</h3>
+ <pre>
+<device>
+ <name>mdev_4b20d080_1b54_4048_85b3_a6a62d165c01</name>
+
<path>/sys/devices/pci0000:00/0000:00:02.0/4b20d080-1b54-4048-85b3-a6a62d165c01</path>
+ <parent>pci_0000_06_00_0</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='nvidia-11'/>
+ <iommuGroup number='12'/>
+ <capability/>
+<device/></pre>
+
+ <p>
+ The support of mediated device's framework in libvirt's node device driver
+ covers the following features:
+ </p>
+
+ <ul>
+ <li>
+ list available mediated devices on the host
+ (<span class="since">Since 3.3.0</span>)
+ </li>
+ <li>
+ display device details
+ (<span class="since">Since 3.3.0</span>)
+ </li>
+ </ul>
+
+ <p>
+ Because mediated devices are instantiated from vendor specific templates,
+ simply called 'types', information describing these types is contained
+ within the parent device's capabilities
+ (see the example in <a href="#PCI">PCI host
devices</a>).<br/><br/>
+
+ To see the supported mediated device types on a specific physical device
+ use the following:
+ </p>
+
+ <pre>
+$ ls /sys/class/mdev_bus/<device>/mdev_supported_types</pre>
+
+ <p>
+ To manually instantiate a mediated device, use one of the following as a
+ reference:
+ </p>
+
+ <pre>
+$ uuidgen >
/sys/class/mdev_bus/<device>/mdev_supported_types/<type>/create
+...
+$ echo <UUID> >
/sys/class/mdev_bus/<device>/mdev_supported_types/<type>/create</pre>
+
+ <p>
+ Manual removal of a mediated device is then performed as follows:
+ </p>
+
+ <pre>
+$ echo 1 > /sys/bus/mdev/devices/<uuid>/remove</pre>
+
</body>
</html>
--
2.12.2