This series adds ARM Nested Virtualization support in KVM mode. This is a respin of previous contributions from Miguel [1] and Haibo [2].
This was tested with Marc's v11 [3] on Ampere HW with fedora L1 guest and L2 guests booted without EDK2. However it does not work yet with EDK2 but it looks unrelated to this qemu integration (host hard lockups). The host needs to be booted with "kvm-arm.mode=nested" option and qemu needs to be invoked with : -machine virt,virtualization=on Known issues: - Does not work on hosts supporting both SVE and NV2. KVM does not support both SVE and NV2 and the current qemu integration attempts to creates a scracth VM with both if those are exposed by the host. - L2 guest featuring EDK2 does not work. This produces hard lockups on host - Migration does not work. After ages one gets on the destination side: qemu-system-aarch64: error while loading state for instance 0x0 of device 'cpu' qemu-system-aarch64: Failed to put registers after init: Invalid argument This series can be found at: https://github.com/eauger/qemu/tree/v9.0-nv-rfcv3 Previous version from Miguel: [1] https://lore.kernel.org/all/20230227163718.62003-1-miguel.l...@oracle.com/ Previous version from Haibo: [2] https://lore.kernel.org/qemu-devel/cover.1617281290.git.haibo...@linaro.org/ [3] Based on Marc's kvm-arm64/nv-6.9-sr-enforcement branch [PATCH v11 00/43] KVM: arm64: Nested Virtualization support (FEAT_NV2 only) https://lore.kernel.org/linux-arm-kernel/20231120131027.854038-1-...@kernel.org/T/ available at: https://github.com/eauger/linux/tree/v6.8-rc1-nv2-sr-enforcement --- v2 -> v3: - KVM EL2 only is set if virtualization option is set - fixes regression with virtualization=off - Add checks against unsupported GIC configs until the kernel does Haibo Xu (5): [Placeholder] headers: Partial headers update for NV2 enablement hw/arm: Allow setting KVM vGIC maintenance IRQ target/arm/kvm: Add helper to detect EL2 when using KVM target/arm: Enable feature ARM_FEATURE_EL2 if EL2 is supported hw/arm/virt: Allow virt extensions with KVM hw/arm/virt.c | 13 ++++++++++++- hw/intc/arm_gicv3_common.c | 1 + hw/intc/arm_gicv3_kvm.c | 21 +++++++++++++++++++++ include/hw/intc/arm_gicv3_common.h | 1 + linux-headers/asm-arm64/kvm.h | 1 + linux-headers/linux/kvm.h | 1 + target/arm/kvm.c | 21 +++++++++++++++++++++ target/arm/kvm_arm.h | 12 ++++++++++++ 8 files changed, 70 insertions(+), 1 deletion(-) -- 2.41.0