• Marc Zyngier's avatar
    arm/arm64: KVM: Perform local TLB invalidation when multiplexing vcpus on a single CPU · 94d0e598
    Marc Zyngier authored
    Architecturally, TLBs are private to the (physical) CPU they're
    associated with. But when multiple vcpus from the same VM are
    being multiplexed on the same CPU, the TLBs are not private
    to the vcpus (and are actually shared across the VMID).
    
    Let's consider the following scenario:
    
    - vcpu-0 maps PA to VA
    - vcpu-1 maps PA' to VA
    
    If run on the same physical CPU, vcpu-1 can hit TLB entries generated
    by vcpu-0 accesses, and access the wrong physical page.
    
    The solution to this is to keep a per-VM map of which vcpu ran last
    on each given physical CPU, and invalidate local TLBs when switching
    to a different vcpu from the same VM.
    Reviewed-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    94d0e598
tlb.c 2.12 KB