From: Andrea Bolognani Date: Fri, 12 May 2017 13:29:57 +0200 Subject: [PATCH] qemu: Use GICv2 for aarch64/virt TCG guests 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 (cherry picked from commit bc07101a7c2cd2ce07ad1ca28c47e0a7cde5625d) --- src/qemu/qemu_domain.c | 23 +++++++++++++++++++++- .../qemuxml2argv-aarch64-gic-none-tcg.args | 2 +- .../qemuxml2xmlout-aarch64-gic-none-tcg.xml | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 589eb1889..891f8258a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2527,6 +2527,24 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def, for (version = VIR_GIC_VERSION_LAST - 1; version > VIR_GIC_VERSION_NONE; version--) { + + /* 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 (version == VIR_GIC_VERSION_3 && + def->virtType == VIR_DOMAIN_VIRT_QEMU) { + continue; + } + if (virQEMUCapsSupportsGICVersion(qemuCaps, def->virtType, version)) { @@ -2544,8 +2562,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 975a01481..52b699696 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 69510e281..a0cd0b768 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-aarch64-gic-none-tcg.xml @@ -9,7 +9,7 @@ - + cortex-a57