• Will Deacon's avatar
    arm64: KVM: Add support for VPIPT I-caches · 87da236e
    Will Deacon authored
    A VPIPT I-cache has two main properties:
    
    1. Lines allocated into the cache are tagged by VMID and a lookup can
       only hit lines that were allocated with the current VMID.
    
    2. I-cache invalidation from EL1/0 only invalidates lines that match the
       current VMID of the CPU doing the invalidation.
    
    This can cause issues with non-VHE configurations, where the host runs
    at EL1 and wants to invalidate I-cache entries for a guest running with
    a different VMID. VHE is not affected, because the host runs at EL2 and
    I-cache invalidation applies as expected.
    
    This patch solves the problem by invalidating the I-cache when unmapping
    a page at stage 2 on a system with a VPIPT I-cache but not running with
    VHE enabled. Hopefully this is an obscure enough configuration that the
    overhead isn't anything to worry about, although it does mean that the
    by-range I-cache invalidation currently performed when mapping at stage
    2 can be elided on such systems, because the I-cache will be clean for
    the guest VMID following a rollover event.
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    87da236e
tlb.c 4.28 KB