]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: format address wdith on intel-iommu command line
authorMenno Lageman <menno.lageman@oracle.com>
Thu, 4 Jun 2020 07:42:43 +0000 (09:42 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 23 Jun 2020 13:53:10 +0000 (15:53 +0200)
Format the address width attribute. Depending on the version of
QEMU it is named 'aw-bits' or 'x-aw-bits'.

Signed-off-by: Menno Lageman <menno.lageman@oracle.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_command.c
src/qemu/qemu_validate.c
tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml
tests/qemuxml2argvdata/intel-iommu-aw-bits.x86_64-latest.args [new file with mode: 0644]
tests/qemuxml2argvtest.c

index 484fff99e5781bffc8740a02ebc72fb80e5951b9..7e598d69897afb63449eaf5245fe2d748c8ad801 100644 (file)
@@ -593,6 +593,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
 
               /* 375 */
               "migration-param.xbzrle-cache-size",
+              "intel-iommu.aw-bits",
     );
 
 
@@ -1481,6 +1482,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsIntelIOMMU[] = {
     { "caching-mode", QEMU_CAPS_INTEL_IOMMU_CACHING_MODE, NULL },
     { "eim", QEMU_CAPS_INTEL_IOMMU_EIM, NULL },
     { "device-iotlb", QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB, NULL },
+    { "aw-bits", QEMU_CAPS_INTEL_IOMMU_AW_BITS, NULL },
 };
 
 static struct virQEMUCapsDevicePropsFlags virQEMUCapsObjectPropsVirtualCSSBridge[] = {
index 92d42ed80b3c7fe37009b40e165961988fdc98b9..5f1ac2dba956518f67c645e40513152ad302cc5a 100644 (file)
@@ -573,6 +573,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
 
     /* 375 */
     QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, /* xbzrle-cache-size field in migrate-set-parameters */
+    QEMU_CAPS_INTEL_IOMMU_AW_BITS, /* intel-iommu.aw-bits */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
index f27246b4c604079de5418b5370a614d450cf031b..73a655a0bc3345fe152482fdd0aa033a45e5da9b 100644 (file)
@@ -6204,6 +6204,8 @@ qemuBuildIOMMUCommandLine(virCommandPtr cmd,
             virBufferAsprintf(&opts, ",device-iotlb=%s",
                               virTristateSwitchTypeToString(iommu->iotlb));
         }
+        if (iommu->aw_bits > 0)
+            virBufferAsprintf(&opts, ",aw-bits=%d", iommu->aw_bits);
 
         virCommandAddArg(cmd, "-device");
         virCommandAddArgBuffer(cmd, &opts);
index b1a81ab19363a79824f81f974bffd69d1ca92970..c5ca3a872f74fc686f002f59699a13e4ce0286d3 100644 (file)
@@ -3890,6 +3890,13 @@ qemuValidateDomainDeviceDefIOMMU(const virDomainIOMMUDef *iommu,
                          "with this QEMU binary"));
         return -1;
     }
+    if (iommu->aw_bits > 0 &&
+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_AW_BITS)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("iommu: aw_bits is not supported "
+                         "with this QEMU binary"));
+        return -1;
+    }
 
     return 0;
 }
index 0e66a4c847724ced8e149f965b42f322121cc5ff..e3f83372c22332651329057cb33172e3deef05d9 100644 (file)
   <flag name='migration-param.bandwidth'/>
   <flag name='migration-param.downtime'/>
   <flag name='migration-param.xbzrle-cache-size'/>
+  <flag name='intel-iommu.aw-bits'/>
   <version>4000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100240</microcodeVersion>
index f2d3902e6c7a9a9f966eb98f7ec68fd3b60f53a9..c32d8ea5d84a20e4cadedc568b8dd0367f03bcee 100644 (file)
   <flag name='migration-param.bandwidth'/>
   <flag name='migration-param.downtime'/>
   <flag name='migration-param.xbzrle-cache-size'/>
+  <flag name='intel-iommu.aw-bits'/>
   <version>4001000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100241</microcodeVersion>
index eaf71eb469175935da1610636d2d76c4309e79b3..91ce30ba441c4b4c3dde3c35f4fe22d6e6dcab41 100644 (file)
   <flag name='migration-param.bandwidth'/>
   <flag name='migration-param.downtime'/>
   <flag name='migration-param.xbzrle-cache-size'/>
+  <flag name='intel-iommu.aw-bits'/>
   <version>4002000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100242</microcodeVersion>
index 6d1c7792720553a8336d3283b16627759a04d516..da53abc857f8bc691f6013ab39081deb5fcb64e4 100644 (file)
   <flag name='migration-param.bandwidth'/>
   <flag name='migration-param.downtime'/>
   <flag name='migration-param.xbzrle-cache-size'/>
+  <flag name='intel-iommu.aw-bits'/>
   <version>5000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100241</microcodeVersion>
index 26a7985addafec3d4d440321a3e92da1585a9ce7..b7058ee5970db46e53eb6c56a6da78ecce316523 100644 (file)
   <flag name='migration-param.bandwidth'/>
   <flag name='migration-param.downtime'/>
   <flag name='migration-param.xbzrle-cache-size'/>
+  <flag name='intel-iommu.aw-bits'/>
   <version>5000050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100242</microcodeVersion>
diff --git a/tests/qemuxml2argvdata/intel-iommu-aw-bits.x86_64-latest.args b/tests/qemuxml2argvdata/intel-iommu-aw-bits.x86_64-latest.args
new file mode 100644 (file)
index 0000000..0ce0952
--- /dev/null
@@ -0,0 +1,33 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/tmp/lib/domain--1-QEMUGuest1 \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-x86_64 \
+-name guest=QEMUGuest1,debug-threads=on \
+-S \
+-object secret,id=masterKey0,format=raw,\
+file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+-machine q35,accel=kvm,usb=off,dump-guest-core=off,kernel_irqchip=split \
+-cpu qemu64 \
+-m 214 \
+-overcommit mem-lock=off \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,fd=1729,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc \
+-no-shutdown \
+-no-acpi \
+-boot strict=on \
+-device intel-iommu,intremap=on,aw-bits=48 \
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
+resourcecontrol=deny \
+-msg timestamp=on
index 337fe1acdab4d09d44ba3b63edaff6605a8d1515..6df5a3597cf55812fc8f2a530224ffa16f9a6725 100644 (file)
@@ -3102,6 +3102,7 @@ mymain(void)
     DO_TEST_CAPS_LATEST("intel-iommu-caching-mode");
     DO_TEST_CAPS_LATEST("intel-iommu-eim");
     DO_TEST_CAPS_LATEST("intel-iommu-device-iotlb");
+    DO_TEST_CAPS_LATEST("intel-iommu-aw-bits");
     DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
     DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");