• Avi Kivity's avatar
    KVM: MMU: Fix false flooding when a pte points to page table · 1b7fcd32
    Avi Kivity authored
    The KVM MMU tries to detect when a speculative pte update is not actually
    used by demand fault, by checking the accessed bit of the shadow pte.  If
    the shadow pte has not been accessed, we deem that page table flooded and
    remove the shadow page table, allowing further pte updates to proceed
    without emulation.
    
    However, if the pte itself points at a page table and only used for write
    operations, the accessed bit will never be set since all access will happen
    through the emulator.
    
    This is exactly what happens with kscand on old (2.4.x) HIGHMEM kernels.
    The kernel points a kmap_atomic() pte at a page table, and then
    proceeds with read-modify-write operations to look at the dirty and accessed
    bits.  We get a false flood trigger on the kmap ptes, which results in the
    mmu spending all its time setting up and tearing down shadows.
    
    Fix by setting the shadow accessed bit on emulated accesses.
    Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
    1b7fcd32
mmu.c 55.2 KB