[libvirt] [PATCH 03/23 v2] Add support for <hostdev mode="capabilities">
Eric Blake
eblake at redhat.com
Mon Dec 17 16:58:05 UTC 2012
> The <hostdev> device type has long had a redundant "mode"
> attribute, which has always been "subsys". This finally
> introduces a new mode "capabilities", which will be used
> by the LXC driver for device assignment. Since container
> based virtualization uses a single kernel, the idea of
> assigning physical PCI devices doesn't make sense. It is
> still reasonable to assign USB devices, but for assigning
> arbitrary nodes in /dev, the new 'capabilities' mode is
> to be used.
>
>
> Changes since v1:
>
> - Add missing docs
> - Add missing schema change
Yep, that was what I complained about in v1.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> docs/formatdomain.html.in | 55 ++++++++++-
> docs/schemas/domaincommon.rng | 139
> +++++++++++++++++++---------
> src/conf/domain_audit.c | 92 ++++++++++++++-----
> src/conf/domain_conf.c | 173
> ++++++++++++++++++++++++++++++++++-
> src/conf/domain_conf.h | 31 +++++--
> src/libvirt_private.syms | 1 +
> tests/lxcxml2xmldata/lxc-hostdev.xml | 34 +++++++
> tests/lxcxml2xmltest.c | 1 +
> 8 files changed, 448 insertions(+), 78 deletions(-)
> create mode 100644 tests/lxcxml2xmldata/lxc-hostdev.xml
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 292e032..d8fe35d 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -2123,13 +2123,15 @@
> </dd>
> </dl>
>
> - <h4><a name="elementsUSB">USB and PCI devices</a></h4>
You are deleting an anchor name; this will invalidate any URLs that were
previously pointing to that name. Not necessarily the end of the world;
such URLs will still be to the right page, just wrong area of the page.
> + <h4><a name="elementsHostDev">Host device assignment</a></h4>
> +
> + <h5><a href="elementsHostDevSubsys">USB / PCI devices</a></h5>
> @@ -2247,6 +2249,51 @@
> more details on the address element.
> </dl>
>
> +
> + <h5><a href="elementsHostDevSubsys">Block / character
> devices</a></h5>
Oops, you used the anchor name #elementsHostDevSubsys twice. How did
that validate? I think you want this anchor to be
#elementsHostDevCapabilities
> +
> + <p>
> + Block / character devices from the host can be passed through
> + to the guest using the <code>hostdev</code> element. This is
> + only possible with container based virtualization.
> + <span class="since">since after 1.0.1 for LXC</span>:
> + </p>
> +
> + <pre>
> +...
> +<hostdev mode='capabilities' type='storage'>
> + <source>
> + <block>/dev/sdf1</block>
> + </source>
> +</hostdev>
> +...
> + </pre>
> +
> + <pre>
> +...
> +<hostdev mode='capabilities' type='misc'>
> + <source>
> + <char>/dev/input/event3</char>
> + </source>
> +</hostdev>
> +...
> + </pre>
> +
> + <dl>
> + <dt><code>hostdev</code></dt>
> + <dd>The <code>hostdev</code> element is the main container for
> describing
> + host devices. For block/characgter device passthrough
s/characgter/character/
> <code>mode</code> is
> + always "capabilities" and <code>type</code> is "block" for a
> block
> + device and "char" for a character device.
> + </dd>
> + <dt><code>source</code></dt>
> + <dd>The source element describes the device as seen from the
> host.
> + For block devices, the path to the block device in the host
> + OS is provided in the nested "block" element, while for
> character
> + devices the "char" element is used
> + </dd>
> + </dl>
> +
> <h4><a name="elementsRedir">Redirected devices</a></h4>
>
> <p>
> diff --git a/docs/schemas/domaincommon.rng
> b/docs/schemas/domaincommon.rng
> index cdc5115..5e4f59b 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -2834,63 +2834,120 @@
> </zeroOrMore>
> </element>
> </define>
> +
> <define name="hostdev">
> <element name="hostdev">
> + <choice>
> + <group>
> + <ref name="hostdevsubsys"/>
> + </group>
> + <group>
> + <ref name="hostdevcaps"/>
> + </group>
> + </choice>
> <optional>
> + <define name="hostdevcaps">
> + <attribute name="mode">
> + <value>capabilities</value>
> + </attribute>
> + <choice>
> + <group>
> + <ref name="hostdevcapsstorage"/>
> + </group>
> + </choice>
No choice for hostdevcapsmisc yet...
> +
> + <define name="hostdevcapsmisc">
> + <attribute name="type">
> + <value>misc</value>
> + </attribute>
> + <element name="source">
> + <element name="char">
> + <ref name="absFilePath"/>
> + </element>
> + </element>
> + </define>
...which makes this <define> unused. I don't know if that was
intentional, or just an accidental omission, but trust that
you'll get it sorted out before the end of the series.
> +++ b/tests/lxcxml2xmldata/lxc-hostdev.xml
> @@ -0,0 +1,34 @@
> + <hostdev mode='capabilities' type='storage'>
> + <source>
> + <block>/dev/sdf1</block>
> + </source>
> + </hostdev>
> + <hostdev mode='capabilities' type='char'>
How did this validate? Shouldn't it be type='misc'?
ACK with those issues fixed.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list