Here's a bunch of vgic-v3 fixes I have been sitting on for some time. None of them are critical, though some are rather entertaining. The first one is a leftover from the initial Apple-M1 enablement, which doesn't advertise the GIC support via ID_AA64PFR0_EL1 (which is expected, as it only has half a GIC...). We address it by forcefully advertising the feature if the guest has a GICv3. The second patch is really fun, and shows how things can go wrong when they are badly specified. The gist of it is that on systems that advertise ICH_VTR_EL2.SEIS, we need to fallback to the full GICv3 cpuif emulation. The third patch is an good optimisation on the previous one, and the fourth a direct consequence of the whole thing. The last patch are more of a harmless oddity: virtual LPIs happen to have an active state buried into the pseudocode (and only there). Fun! Nothing goes wrong with that, but we need to align the emulation to match the pseudocode. All of this is only targeting 5.16, and I don't plan to backport any of it. * From v1 [1]: - Dropped the patch that tried to optimise what to do with an active LPI. There is unfortunately a bad corner case in the pseudocode that prevents it. Oh well. - Added an extra patch to help in the case where ICH_HCR_EL2.TDS is supported, and that we can use that instead of ICH_HCR_EL2.TC to trap only ICC_DIR_EL1. Given the performance improvement, it was too hard to ignore it. [1] https://lore.kernel.org/r/20210924082542.2766170-1-maz@xxxxxxxxxx Marc Zyngier (5): KVM: arm64: Force ID_AA64PFR0_EL1.GIC=1 when exposing a virtual GICv3 KVM: arm64: vgic-v3: Work around GICv3 locally generated SErrors KVM: arm64: vgic-v3: Reduce common group trapping to ICV_DIR_EL1 when possible KVM: arm64: vgic-v3: Don't advertise ICC_CTLR_EL1.SEIS KVM: arm64: vgic-v3: Align emulated cpuif LPI state machine with the pseudocode arch/arm64/include/asm/sysreg.h | 3 +++ arch/arm64/kvm/hyp/vgic-v3-sr.c | 22 ++++++++-------------- arch/arm64/kvm/sys_regs.c | 5 +++++ arch/arm64/kvm/vgic/vgic-v3.c | 21 ++++++++++++++++++--- 4 files changed, 34 insertions(+), 17 deletions(-) -- 2.30.2