[libvirt] [PATCH 3/5] qemu: Use GICv2 for aarch64/virt TCG guests

Andrea Bolognani abologna at redhat.com
Fri May 12 14:14:45 UTC 2017


There are currently some limitations in the emulated GICv3
that make it unsuitable as a default. Use GICv2 instead.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1450433

Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
 src/qemu/qemu_domain.c                             | 41 +++++++++++++++-------
 .../qemuxml2argv-aarch64-gic-none-tcg.args         |  2 +-
 .../qemuxml2xmlout-aarch64-gic-none-tcg.xml        |  2 +-
 3 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index cc02c80..31ed391 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2559,17 +2559,31 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
     if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ABSENT &&
         qemuDomainIsVirt(def)) {
 
-        VIR_DEBUG("Looking for usable GIC version in domain capabilities");
-        for (version = VIR_GIC_VERSION_LAST - 1;
-             version > VIR_GIC_VERSION_NONE;
-             version--) {
-            if (virQEMUCapsSupportsGICVersion(qemuCaps,
-                                              def->virtType,
-                                              version)) {
-                VIR_DEBUG("Using GIC version %s",
-                          virGICVersionTypeToString(version));
-                def->gic_version = version;
-                break;
+        /* We want to use the highest available GIC version for guests;
+         * however, the emulated GICv3 is currently lacking a MSI controller,
+         * making it unsuitable for the pure PCIe topology we aim for.
+         *
+         * For that reason, we skip this step entirely for TCG guests,
+         * and rely on the code below to pick the default version, GICv2,
+         * which supports all the features we need.
+         *
+         * We'll want to revisit this once MSI support for GICv3 has been
+         * implemented in QEMU.
+         *
+         * See https://bugzilla.redhat.com/show_bug.cgi?id=1414081 */
+        if (def->virtType == VIR_DOMAIN_VIRT_KVM) {
+            VIR_DEBUG("Looking for usable GIC version in domain capabilities");
+            for (version = VIR_GIC_VERSION_LAST - 1;
+                 version > VIR_GIC_VERSION_NONE;
+                 version--) {
+                if (virQEMUCapsSupportsGICVersion(qemuCaps,
+                                                  def->virtType,
+                                                  version)) {
+                    VIR_DEBUG("Using GIC version %s",
+                              virGICVersionTypeToString(version));
+                    def->gic_version = version;
+                    break;
+                }
             }
         }
 
@@ -2580,8 +2594,11 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
 
     /* Use the default GIC version if no version was specified */
     if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON &&
-        def->gic_version == VIR_GIC_VERSION_NONE)
+        def->gic_version == VIR_GIC_VERSION_NONE) {
+        VIR_DEBUG("Using GIC version %s (default)",
+                  virGICVersionTypeToString(VIR_GIC_VERSION_DEFAULT));
         def->gic_version = VIR_GIC_VERSION_DEFAULT;
+    }
 }
 
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-tcg.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-tcg.args
index 975a014..52b6996 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-tcg.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-gic-none-tcg.args
@@ -7,7 +7,7 @@ QEMU_AUDIO_DRV=none \
 /usr/bin/qemu-system-aarch64 \
 -name guest \
 -S \
--machine virt,accel=tcg,gic-version=3 \
+-machine virt,accel=tcg \
 -cpu cortex-a57 \
 -m 1024 \
 -smp 1,sockets=1,cores=1,threads=1 \
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml
index 69510e2..a0cd0b7 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml
@@ -9,7 +9,7 @@
     <boot dev='hd'/>
   </os>
   <features>
-    <gic version='3'/>
+    <gic version='2'/>
   </features>
   <cpu mode='custom' match='exact' check='none'>
     <model fallback='allow'>cortex-a57</model>
-- 
2.7.4




More information about the libvir-list mailing list