]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Support rng model=virtio-{non-}transitional
authorCole Robinson <crobinso@redhat.com>
Thu, 17 Jan 2019 17:52:35 +0000 (12:52 -0500)
committerCole Robinson <crobinso@redhat.com>
Mon, 4 Mar 2019 16:08:41 +0000 (11:08 -0500)
Add new <rng> model values for virtio transitional devices. Ex:

  <rng model='virtio-transitional'>
    ...
  </rng>

* "virtio-transitional" maps to qemu "virtio-rng-pci-transitional"
* "virtio-non-transitional" maps to qemu "virtio-rng-pci-non-transitional"

Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
16 files changed:
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain_address.c
tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args
tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args
tests/qemuxml2argvdata/virtio-non-transitional.xml
tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args
tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args
tests/qemuxml2argvdata/virtio-transitional.xml
tests/qemuxml2xmloutdata/virtio-non-transitional.xml
tests/qemuxml2xmloutdata/virtio-transitional.xml
tests/qemuxml2xmltest.c

index b8704d4d59a5d4cfd4db3b52483b9d1e932e8d3d..16ceae6e2bd54257c8e638ae486e042d0e299c10 100644 (file)
@@ -8027,7 +8027,11 @@ qemu-kvm -net nic,model=? /dev/null
         </p>
         <ul>
           <li>'virtio' - supported by qemu and virtio-rng kernel module</li>
+          <li>'virtio-transitional' <span class='since'>Since 5.2.0</span></li>
+          <li>'virtio-non-transitional' <span class='since'>Since 5.2.0</span></li>
         </ul>
+        See <a href="#elementsVirtioTransitional">Virtio transitional devices</a>
+        for more details.
       </dd>
       <dt><code>rate</code></dt>
       <dd>
index 0e406d81eaf677b0b60dbeb79ac8fc2365853505..b0ea8a0113b3e8ad042e20d6d27512e47dc250d3 100644 (file)
   <define name="rng">
     <element name="rng">
       <attribute name="model">
-        <value>virtio</value>
+        <choice>
+          <value>virtio</value>
+          <value>virtio-transitional</value>
+          <value>virtio-non-transitional</value>
+        </choice>
       </attribute>
       <interleave>
         <ref name="rng-backend"/>
index 0e5cc946e191b26c4cf736ad0abbf0dccc3a5464..0b818fd8d581fa7738ba9b3ddff9e73a19cd8cf9 100644 (file)
@@ -953,7 +953,10 @@ VIR_ENUM_IMPL(virDomainDiskTray, VIR_DOMAIN_DISK_TRAY_LAST,
 
 VIR_ENUM_IMPL(virDomainRNGModel,
               VIR_DOMAIN_RNG_MODEL_LAST,
-              "virtio");
+              "virtio",
+              "virtio-transitional",
+              "virtio-non-transitional",
+);
 
 VIR_ENUM_IMPL(virDomainRNGBackend,
               VIR_DOMAIN_RNG_BACKEND_LAST,
index 552d3adb5bb0ea48b4b47a6195ba8e556e0e425d..37cc4c775cbb1fa7125bf612a3aec4e90a3ed2ea 100644 (file)
@@ -2141,6 +2141,8 @@ struct _virBlkioDevice {
 
 typedef enum {
     VIR_DOMAIN_RNG_MODEL_VIRTIO,
+    VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL,
+    VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL,
 
     VIR_DOMAIN_RNG_MODEL_LAST
 } virDomainRNGModel;
index d4dd3b287117a2ec327427c1a91196e97da0d8e1..b1708b7f06d6749ac3a5b8e599d6bf15a5c9c176 100644 (file)
@@ -492,6 +492,11 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
             has_ntmodel = device.data.hostdev->source.subsys.u.scsi_host.model == VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_NON_TRANSITIONAL;
             break;
 
+        case VIR_DOMAIN_DEVICE_RNG:
+            has_tmodel = device.data.rng->model == VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL;
+            has_ntmodel = device.data.rng->model == VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL;
+            break;
+
         case VIR_DOMAIN_DEVICE_LEASE:
         case VIR_DOMAIN_DEVICE_FS:
         case VIR_DOMAIN_DEVICE_INPUT:
@@ -510,7 +515,6 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
         case VIR_DOMAIN_DEVICE_SHMEM:
         case VIR_DOMAIN_DEVICE_TPM:
         case VIR_DOMAIN_DEVICE_PANIC:
-        case VIR_DOMAIN_DEVICE_RNG:
         case VIR_DOMAIN_DEVICE_MEMORY:
         case VIR_DOMAIN_DEVICE_IOMMU:
         case VIR_DOMAIN_DEVICE_VSOCK:
index 690a57521eeceabc30841e18ebd1f495383fc090..70aa0346e258eadce8ebce7f6d23b1d89311a759 100644 (file)
@@ -4540,6 +4540,12 @@ qemuDomainRNGDefValidate(const virDomainRNGDef *def,
         modelIsSupported = virQEMUCapsGet(qemuCaps,
                                           QEMU_CAPS_DEVICE_VIRTIO_RNG);
         break;
+    case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL:
+    case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL:
+        modelIsSupported = (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG) &&
+                            (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL) ||
+                             virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)));
+        break;
     case VIR_DOMAIN_RNG_MODEL_LAST:
         break;
     }
index 5dcc7b4d6b0c5a5e65cd472b13db43f05c455997..e097356327bf760b21556461d3d5455439f7c6b6 100644 (file)
@@ -878,7 +878,11 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
 
     case VIR_DOMAIN_DEVICE_RNG:
         switch ((virDomainRNGModel) dev->data.rng->model) {
+        case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL:
+            /* Transitional devices only work in conventional PCI slots */
+            return pciFlags;
         case VIR_DOMAIN_RNG_MODEL_VIRTIO:
+        case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL:
             return virtioFlags;
 
         case VIR_DOMAIN_RNG_MODEL_LAST:
index 500c03bdc3f8502814e24e3ceb6dfd81046c84b1..10cc6236cbaf1340b642e663b214cfd404865e82 100644 (file)
@@ -28,6 +28,7 @@ addr=0x1 \
 -device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
 -device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
 -device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \
+-device pcie-root-port,port=0xc,chassis=5,id=pci.5,bus=pcie.0,addr=0x1.0x4 \
 -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
 -device virtio-blk-pci,disable-legacy=on,disable-modern=off,scsi=off,bus=pci.2,\
 addr=0x0,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
@@ -36,6 +37,9 @@ addr=0x0,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
 id=net0,mac=00:11:22:33:44:55,bus=pci.1,addr=0x0 \
 -device vhost-scsi-pci,disable-legacy=on,disable-modern=off,\
 wwpn=naa.5123456789abcde0,vhostfd=3,id=hostdev0,bus=pci.3,addr=0x0 \
+-object rng-random,id=objrng0,filename=/dev/urandom \
+-device virtio-rng-pci,disable-legacy=on,disable-modern=off,rng=objrng0,\
+id=rng0,bus=pci.4,addr=0x0 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index c8dbffda6504132169d6b90adb1e1c3f9a8a4d61..a0fc475c2fe4dd8630d781b02680cf2bad6474c4 100644 (file)
@@ -28,6 +28,7 @@ addr=0x1 \
 -device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
 -device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
 -device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \
+-device pcie-root-port,port=0xc,chassis=5,id=pci.5,bus=pcie.0,addr=0x1.0x4 \
 -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
 -device virtio-blk-pci-non-transitional,scsi=off,bus=pci.2,addr=0x0,\
 drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
@@ -36,6 +37,8 @@ drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
 mac=00:11:22:33:44:55,bus=pci.1,addr=0x0 \
 -device vhost-scsi-pci-non-transitional,wwpn=naa.5123456789abcde0,vhostfd=3,\
 id=hostdev0,bus=pci.3,addr=0x0 \
+-object rng-random,id=objrng0,filename=/dev/urandom \
+-device virtio-rng-pci-non-transitional,rng=objrng0,id=rng0,bus=pci.4,addr=0x0 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 14ff02ace6f6220736df07f868d19158967ac91e..74760e75bc39023927db724d9faaa9694feaa04e 100644 (file)
@@ -18,6 +18,9 @@
     <hostdev mode='subsystem' type='scsi_host' managed='no' model='virtio-non-transitional'>
       <source protocol='vhost' wwpn='naa.5123456789abcde0'/>
     </hostdev>
+    <rng model='virtio-non-transitional'>
+      <backend model='random'>/dev/urandom</backend>
+    </rng>
     <controller type='usb' model='none'/>
     <memballoon model='none'/>
   </devices>
index d4d2b8ec354241881bc8487266a68127692031ec..b21a6cadd4c160b7999fe733092ffc4fe48255df 100644 (file)
@@ -35,6 +35,9 @@ bus=pci.2,addr=0x2,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
 id=net0,mac=00:11:22:33:44:55,bus=pci.2,addr=0x1 \
 -device vhost-scsi-pci,disable-legacy=off,disable-modern=off,\
 wwpn=naa.5123456789abcde0,vhostfd=3,id=hostdev0,bus=pci.2,addr=0x3 \
+-object rng-random,id=objrng0,filename=/dev/urandom \
+-device virtio-rng-pci,disable-legacy=off,disable-modern=off,rng=objrng0,\
+id=rng0,bus=pci.2,addr=0x4 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index ab2c35514d4f5582bffdd0b5a214dc0aa94e8b72..64fb4153fd7d3ceffbe8d49fae8ecf278de1cfec 100644 (file)
@@ -35,6 +35,8 @@ drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
 mac=00:11:22:33:44:55,bus=pci.2,addr=0x1 \
 -device vhost-scsi-pci-transitional,wwpn=naa.5123456789abcde0,vhostfd=3,\
 id=hostdev0,bus=pci.2,addr=0x3 \
+-object rng-random,id=objrng0,filename=/dev/urandom \
+-device virtio-rng-pci-transitional,rng=objrng0,id=rng0,bus=pci.2,addr=0x4 \
 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
 resourcecontrol=deny \
 -msg timestamp=on
index 3149803171fab1209d3aba8f763511c2e8bba787..fa60016235715c7d9207b555314b88c6960ff70b 100644 (file)
@@ -18,6 +18,9 @@
     <hostdev mode='subsystem' type='scsi_host' managed='no' model='virtio-transitional'>
       <source protocol='vhost' wwpn='naa.5123456789abcde0'/>
     </hostdev>
+    <rng model='virtio-transitional'>
+      <backend model='random'>/dev/urandom</backend>
+    </rng>
     <controller type='usb' model='none'/>
     <memballoon model='none'/>
   </devices>
index 2af5195dfd71a252904ad1757597190a3903ee47..4a315050ab0c44e382cf1d30dbc426b9c77c2995 100644 (file)
       <target chassis='4' port='0xb'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
     </controller>
+    <controller type='pci' index='5' model='pcie-root-port'>
+      <model name='pcie-root-port'/>
+      <target chassis='5' port='0xc'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
+    </controller>
     <interface type='user'>
       <mac address='00:11:22:33:44:55'/>
       <model type='virtio-non-transitional'/>
@@ -57,5 +62,9 @@
       <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
     </hostdev>
     <memballoon model='none'/>
+    <rng model='virtio-non-transitional'>
+      <backend model='random'>/dev/urandom</backend>
+      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+    </rng>
   </devices>
 </domain>
index 8c1baced0e3da6893a7cea814f901f56dd8a4d6d..ae3789ad93de59bbd73ecea6095ca03d99f51665 100644 (file)
@@ -51,5 +51,9 @@
       <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
     </hostdev>
     <memballoon model='none'/>
+    <rng model='virtio-transitional'>
+      <backend model='random'>/dev/urandom</backend>
+      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
+    </rng>
   </devices>
 </domain>
index 15f0ccffb10210ccd1332544e2122de5f42f5139..b99f2d75835731f490ad8df87e26579aadc500d9 100644 (file)
@@ -1258,11 +1258,13 @@ mymain(void)
             QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
             QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
             QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
+            QEMU_CAPS_DEVICE_VIRTIO_RNG,
             QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
     DO_TEST("virtio-non-transitional",
             QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
             QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
             QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
+            QEMU_CAPS_DEVICE_VIRTIO_RNG,
             QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
 
     if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)