]> www.infradead.org Git - users/jedix/linux-maple.git/commit
KVM: arm64: Resolve vLPI by host IRQ in vgic_v4_unset_forwarding()
authorOliver Upton <oliver.upton@linux.dev>
Fri, 23 May 2025 19:47:20 +0000 (12:47 -0700)
committerMarc Zyngier <maz@kernel.org>
Fri, 30 May 2025 08:11:29 +0000 (09:11 +0100)
commit05b9405f2fa1848e984f231708fa1e5d385e4d27
tree3cda702f22b0cec3f946907978fdb21dae6db42b
parentfc4dafe87b93ec94204896c4bc8cad7e71bdd151
KVM: arm64: Resolve vLPI by host IRQ in vgic_v4_unset_forwarding()

The virtual mapping and "GSI" routing of a particular vLPI is subject to
change in response to the guest / userspace. This can be pretty annoying
to deal with when KVM needs to track the physical state that's managed
for vLPI direct injection.

Make vgic_v4_unset_forwarding() resilient by using the host IRQ to
resolve the vgic IRQ. Since this uses the LPI xarray directly, finding
the ITS by doorbell address + grabbing it's its_lock is no longer
necessary. Note that matching the right ITS / ITE is already handled in
vgic_v4_set_forwarding(), and unless there's a bug in KVM's VGIC ITS
emulation the virtual mapping that should remain stable for the lifetime
of the vLPI mapping.

Tested-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20250523194722.4066715-4-oliver.upton@linux.dev
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/arm.c
arch/arm64/kvm/vgic/vgic-v4.c
include/kvm/arm_vgic.h