[PATCH 00/16] KVM: arm64: Add NV GICv3 support

Marc Zyngier
2024-12-17T15:14:04Z

As a pendant to the timer code, here's the basic support for GICv3 for
NV.

Compared to the versions that have existed in the past, this is a
significant improvement, as the maintenance interrupt is finally
behaving correctly, and I have dropped the horrible hacks that only
gave the impression something was working.

The code is much simpler, isolated, and can even make some sense if
you have the correct pink-ish glasses.

As for the timer code, this has been tested as part of my integration
branch [1].

[1] https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/log/?h=kvm-arm64/nv-next

Andre Przywara (1):
KVM: arm64: nv: Allow userland to set VGIC maintenance IRQ

Jintack Lim (1):
KVM: arm64: nv: Respect virtual HCR_EL2.TWx setting

Marc Zyngier (12):
arm64: sysreg: Add layout for ICH_HCR_EL2
arm64: sysreg: Add layout for ICH_VTR_EL2
arm64: sysreg: Add layout for ICH_MISR_EL2
KVM: arm64: nv: Load timer before the GIC
KVM: arm64: nv: Add ICH_*_EL2 registers to vpcu_sysreg
KVM: arm64: nv: Plumb handling of GICv3 EL2 accesses
KVM: arm64: nv: Sanitise ICH_HCR_EL2 accesses
KVM: arm64: nv: Nested GICv3 emulation
KVM: arm64: nv: Handle L2->L1 transition on interrupt injection
KVM: arm64: nv: Add Maintenance Interrupt emulation
KVM: arm64: nv: Propagate used_lrs between L1 and L0 contexts
KVM: arm64: nv: Fold GICv3 host trapping requirements into guest setup

Oliver Upton (2):
KVM: arm64: Move host SVE/SME state flags out of vCPU
KVM: arm64: nv: Request vPE doorbell upon nested ERET to L2

.../virt/kvm/devices/arm-vgic-v3.rst | 12 +-
arch/arm64/include/asm/kvm_emulate.h | 13 +
arch/arm64/include/asm/kvm_host.h | 71 ++-
arch/arm64/include/asm/kvm_hyp.h | 2 +
arch/arm64/include/asm/sysreg.h | 30 --
arch/arm64/include/uapi/asm/kvm.h | 1 +
arch/arm64/kvm/Makefile | 2 +-
arch/arm64/kvm/arm.c | 13 +-
arch/arm64/kvm/emulate-nested.c | 18 +-
arch/arm64/kvm/fpsimd.c | 12 +-
arch/arm64/kvm/handle_exit.c | 6 +-
arch/arm64/kvm/hyp/vgic-v3-sr.c | 16 +-
arch/arm64/kvm/nested.c | 12 +
arch/arm64/kvm/sys_regs.c | 95 +++-
arch/arm64/kvm/vgic-sys-reg-v3.c | 8 +-
arch/arm64/kvm/vgic/vgic-init.c | 22 +
arch/arm64/kvm/vgic/vgic-kvm-device.c | 29 +-
arch/arm64/kvm/vgic/vgic-v3-nested.c | 409 ++++++++++++++++++
arch/arm64/kvm/vgic/vgic-v3.c | 44 +-
arch/arm64/kvm/vgic/vgic-v4.c | 18 +-
arch/arm64/kvm/vgic/vgic.c | 38 ++
arch/arm64/kvm/vgic/vgic.h | 6 +
arch/arm64/tools/sysreg | 48 ++
drivers/irqchip/irq-apple-aic.c | 8 +-
include/kvm/arm_vgic.h | 10 +
tools/arch/arm/include/uapi/asm/kvm.h | 1 +
tools/arch/arm64/include/asm/sysreg.h | 30 --
27 files changed, 841 insertions(+), 133 deletions(-)
create mode 100644 arch/arm64/kvm/vgic/vgic-v3-nested.c

--
2.39.2