[libvirt] [PATCH 03/23 v2] Add support for <hostdev mode="capabilities">

Daniel P. Berrange berrange at redhat.com
Mon Dec 17 17:04:55 UTC 2012


On Mon, Dec 17, 2012 at 11:58:05AM -0500, Eric Blake wrote:
> > 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.

Indeed you are correct. Applying the following fixes

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index d8fe35d..8d9ab9e 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -2250,7 +2250,7 @@
     </dl>
 
 
-    <h5><a href="elementsHostDevSubsys">Block / character devices</a></h5>
+    <h5><a href="elementsHostDevCaps">Block / character devices</a></h5>
 
     <p>
       Block / character devices from the host can be passed through
@@ -2282,7 +2282,7 @@
     <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 <code>mode</code> is
+        host devices. For block/character device passthrough <code>mode</code> is
         always "capabilities" and <code>type</code> is "block" for a block
         device and "char" for a character device.
       </dd>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 5e4f59b..0529d62 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2888,6 +2888,9 @@
       <group>
         <ref name="hostdevcapsstorage"/>
       </group>
+      <group>
+        <ref name="hostdevcapsmisc"/>
+      </group>
     </choice>
   </define>
 
diff --git a/tests/lxcxml2xmldata/lxc-hostdev.xml b/tests/lxcxml2xmldata/lxc-hostdev.xml
index d98efb8..02a87a7 100644
--- a/tests/lxcxml2xmldata/lxc-hostdev.xml
+++ b/tests/lxcxml2xmldata/lxc-hostdev.xml
@@ -25,7 +25,7 @@
         <block>/dev/sdf1</block>
       </source>
     </hostdev>
-    <hostdev mode='capabilities' type='char'>
+    <hostdev mode='capabilities' type='misc'>
       <source>
         <char>/dev/tty0</char>
       </source>


-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list