mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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 <abologna@redhat.com>
This commit is contained in:
parent
b24eaf6210
commit
bc07101a7c
@ -2563,6 +2563,24 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
|
|||||||
for (version = VIR_GIC_VERSION_LAST - 1;
|
for (version = VIR_GIC_VERSION_LAST - 1;
|
||||||
version > VIR_GIC_VERSION_NONE;
|
version > VIR_GIC_VERSION_NONE;
|
||||||
version--) {
|
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,
|
if (virQEMUCapsSupportsGICVersion(qemuCaps,
|
||||||
def->virtType,
|
def->virtType,
|
||||||
version)) {
|
version)) {
|
||||||
@ -2580,8 +2598,11 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
|
|||||||
|
|
||||||
/* Use the default GIC version if no version was specified */
|
/* Use the default GIC version if no version was specified */
|
||||||
if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON &&
|
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;
|
def->gic_version = VIR_GIC_VERSION_DEFAULT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ QEMU_AUDIO_DRV=none \
|
|||||||
/usr/bin/qemu-system-aarch64 \
|
/usr/bin/qemu-system-aarch64 \
|
||||||
-name guest \
|
-name guest \
|
||||||
-S \
|
-S \
|
||||||
-machine virt,accel=tcg,gic-version=3 \
|
-machine virt,accel=tcg \
|
||||||
-cpu cortex-a57 \
|
-cpu cortex-a57 \
|
||||||
-m 1024 \
|
-m 1024 \
|
||||||
-smp 1,sockets=1,cores=1,threads=1 \
|
-smp 1,sockets=1,cores=1,threads=1 \
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<boot dev='hd'/>
|
<boot dev='hd'/>
|
||||||
</os>
|
</os>
|
||||||
<features>
|
<features>
|
||||||
<gic version='3'/>
|
<gic version='2'/>
|
||||||
</features>
|
</features>
|
||||||
<cpu mode='custom' match='exact' check='none'>
|
<cpu mode='custom' match='exact' check='none'>
|
||||||
<model fallback='allow'>cortex-a57</model>
|
<model fallback='allow'>cortex-a57</model>
|
||||||
|
Loading…
Reference in New Issue
Block a user