• Marc Zyngier's avatar
    arm/arm64: KVM: Use kernel mapping to perform invalidation on page fault · 0d3e4d4f
    Marc Zyngier authored
    When handling a fault in stage-2, we need to resync I$ and D$, just
    to be sure we don't leave any old cache line behind.
    
    That's very good, except that we do so using the *user* address.
    Under heavy load (swapping like crazy), we may end up in a situation
    where the page gets mapped in stage-2 while being unmapped from
    userspace by another CPU.
    
    At that point, the DC/IC instructions can generate a fault, which
    we handle with kvm->mmu_lock held. The box quickly deadlocks, user
    is unhappy.
    
    Instead, perform this invalidation through the kernel mapping,
    which is guaranteed to be present. The box is much happier, and so
    am I.
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    0d3e4d4f
mmu.c 40.2 KB