diff options
| author | Fuad Tabba <fuad.tabba@linux.dev> | 2026-10-12 17:15:23 +0100 |
|---|---|---|
| committer | Marc Zyngier <maz@kernel.org> | 2026-10-26 07:44:46 +0000 |
| commit | cd38c10e191eb2c37b9904a6ffc3b6bf4d9c0c48 (patch) | |
| tree | cbcd430e82d9bf9a5e8d72ac4bd884941bf3a47d /scripts/basic/split-include.c | |
| parent | fb77bb2a0ff253e6c370ec7dc1afa45b2ecd8d2e (diff) | |
| download | linux-cd38c10e191eb2c37b9904a6ffc3b6bf4d9c0c48.tar.gz linux-cd38c10e191eb2c37b9904a6ffc3b6bf4d9c0c48.zip | |
KVM: arm64: vgic: Do not access the GICv5 CPU interface from EL1
can_access_vgic_from_kernel() requires VHE only for the GICv3 system
register interface, so on a native GICv5 system without
FEAT_GCIE_LEGACY it returns true under nVHE. The kernel then saves and
restores the CPU interface from EL1, where ICH_VMCR_EL2 and the
ICH_PPI_* registers are UNDEFINED, and running a vCPU oopses the host.
The nVHE world switch already does that work at EL2.
Anything that requires EL2 system registers or instructions is out of
reach of a kernel running at EL1, which leaves GICv2, the one
memory-mapped CPU interface. Allow GICv2 from EL1 and require VHE for
everything else.
Fixes: 9b8e3d4ca0e73 ("KVM: arm64: gic-v5: Implement GICv5 load/put and save/restore")
Suggested-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Sascha Bischoff <sascha.bischoff@arm.com>
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
Link: https://patch.msgid.link/20261012161524.4016464-5-fuad.tabba@linux.dev
Signed-off-by: Marc Zyngier <maz@kernel.org>
Diffstat (limited to 'scripts/basic/split-include.c')
0 files changed, 0 insertions, 0 deletions
