[libvirt] [PATCHv2 04/11] Add virtio revision attribute to controllers

Ján Tomko jtomko at redhat.com
Mon Aug 8 16:35:38 UTC 2016


<controller type='scsi' index='0' model='virtio-scsi'>
    <virtio revision='0.9'/>
</controller>

https://bugzilla.redhat.com/show_bug.cgi?id=1227354
---
 docs/formatdomain.html.in                                   |  8 ++++++++
 docs/schemas/domaincommon.rng                               |  3 +++
 src/conf/domain_conf.c                                      |  4 ++++
 src/conf/domain_conf.h                                      |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml     | 10 ++++++++++
 tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml | 10 ++++++++++
 6 files changed, 36 insertions(+)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 5a5826b..04424b4 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3150,6 +3150,14 @@
       additional attributes that control specific features, such as:
     </p>
 
+    <p>
+      For virtio controllers, an optional <code>virtio</code> element
+      can be used to enforce a particular virtio revision in QEMU.
+      The valid values for the <code>revision</code>
+      are <code>0.9</code> and <code>1.0</code>.
+      <span class='since'>Since 2.2.0</span>
+    </p>
+
       <dl>
         <dt><code>virtio-serial</code></dt>
         <dd>The <code>virtio-serial</code> controller has two additional
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 6b40553..4f4db8c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1946,6 +1946,9 @@
             </optional>
           </element>
         </optional>
+        <optional>
+          <ref name="virtioRevision"/>
+        </optional>
       </interleave>
     </element>
   </define>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9ab1f5d..098c853 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8328,6 +8328,9 @@ virDomainControllerDefParseXML(xmlNodePtr node,
         cur = cur->next;
     }
 
+    if (virDomainVirtioRevisionParseXML(ctxt, &def->virtio_rev) < 0)
+        goto error;
+
     /* node is parsed differently from target attributes because
      * someone thought it should be a subelement instead...
      */
@@ -20296,6 +20299,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
             virBufferAsprintf(buf, "<pcihole64 unit='KiB'>%lu</"
                               "pcihole64>\n", def->opts.pciopts.pcihole64size);
         }
+        virDomainVirtioRevisionFormatXML(buf, def->virtio_rev);
 
         virBufferAdjustIndent(buf, -2);
         virBufferAddLit(buf, "</controller>\n");
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 0541a8f..9b0dad0 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -763,6 +763,7 @@ struct _virDomainControllerDef {
         virDomainUSBControllerOpts usbopts;
     } opts;
     virDomainDeviceInfo info;
+    virBitmapPtr virtio_rev;
 };
 
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml b/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
index 1a8a3de..7972617 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
@@ -28,12 +28,22 @@
       <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
       <virtio revision='1.0'/>
     </disk>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw'/>
+      <source file='/var/lib/libvirt/images/img3'/>
+      <target dev='sda' bus='scsi'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
     <controller type='usb' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
     </controller>
     <controller type='ide' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
     </controller>
+    <controller type='scsi' index='0' model='virtio-scsi'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+      <virtio revision='0.9'/>
+    </controller>
     <controller type='pci' index='0' model='pci-root'/>
     <controller type='virtio-serial' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
index 1a8a3de..7972617 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
@@ -28,12 +28,22 @@
       <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
       <virtio revision='1.0'/>
     </disk>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw'/>
+      <source file='/var/lib/libvirt/images/img3'/>
+      <target dev='sda' bus='scsi'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
     <controller type='usb' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
     </controller>
     <controller type='ide' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
     </controller>
+    <controller type='scsi' index='0' model='virtio-scsi'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+      <virtio revision='0.9'/>
+    </controller>
     <controller type='pci' index='0' model='pci-root'/>
     <controller type='virtio-serial' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
-- 
2.7.3




More information about the libvir-list mailing list