• Marc Zyngier's avatar
    KVM: arm/arm64: vgic-v3: De-optimize VMCR save/restore when emulating a GICv2 · ff567614
    Marc Zyngier authored
    When emulating a GICv2-on-GICv3, special care must be taken to only
    save/restore VMCR_EL2 when ICC_SRE_EL1.SRE is cleared. Otherwise,
    all Group-0 interrupts end-up being delivered as FIQ, which is
    probably not what the guest expects, as demonstrated here with
    an unhappy EFI:
    
    	FIQ Exception at 0x000000013BD21CC4
    
    This means that we cannot perform the load/put trick when dealing
    with VMCR_EL2 (because the host has SRE set), and we have to deal
    with it in the world-switch.
    
    Fortunately, this is not the most common case (modern guests should
    be able to deal with GICv3 directly), and the performance is not worse
    than what it was before the VMCR optimization.
    Reviewed-by: default avatarChristoffer Dall <cdall@linaro.org>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
    ff567614
vgic-v3.c 10.9 KB