At the moment if the end-user does not specify the gic-version along with KVM acceleration, v2 is set by default. However most of the systems now have GICv3 and sometimes they do not support GICv2 compatibility. In that case we now end up with the following error:
"qemu-system-aarch64: Initialization of device kvm-arm-gic failed: error creating in-kernel VGIC: No such device Perhaps the host CPU does not support GICv2?" since "1904f9b5f1 hw/intc/arm_gic_kvm: Don't assume kernel can provide a GICv2" which already allowed to output an explicit error message. This patch keeps the default v2 selection in all cases except in the KVM accelerated mode when v2 cannot work: - either because the host does not support v2 in-kernel emulation or - because more than 8 vcpus were requested. Those cases did not work anyway so we do not break any compatibility. Now we get v3 selected in such a case. Best Regards Eric This series can be found at: https://github.com/eauger/qemu/tree/v4.2.0-gic-version-v5 History: v4 -> v5: - Added Drew's R-b on the 2 last patches - addressed few nits reported by Drew v3 -> v4: - do not probe the host GIC version if kernel-irqchip=off - In KVM mode / userspace irqchip we immediatly output an error in case the end-user explicitly selected v3. Also we warn the end-user about the weird usage of host in that case (only userspace GICv2 is supported). - Removed R-b on last 2 patches v2 -> v3: - replaced defines by VirtGICType enum type - fixed some style issue - collected Richard and Dres's R-b except on "hw/arm/virt: Introduce VirtGICType enum type" just to make sure this matches their expectation. RFC -> v1: - 1904f9b5f1 hw/intc/arm_gic_kvm: Don't assume kernel can provide a GICv2" now has landed upstream - Fix gic-version description - Introduce finalize_gic_version and use switch/cases - take into account smp value Eric Auger (6): hw/arm/virt: Document 'max' value in gic-version property description hw/arm/virt: Introduce VirtGICType enum type hw/arm/virt: Introduce finalize_gic_version() target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap hw/arm/virt: kvm: Restructure finalize_gic_version() hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work include/hw/arm/virt.h | 12 +++- target/arm/kvm_arm.h | 3 + hw/arm/virt.c | 145 ++++++++++++++++++++++++++++++++---------- target/arm/kvm.c | 14 ++-- 4 files changed, 134 insertions(+), 40 deletions(-) -- 2.20.1