• Andrew Morton's avatar
    [PATCH] i386 hugetlb tlb correction · 57a3170c
    Andrew Morton authored
    From: William Lee Irwin III <wli@holomorphy.com>
    
    i386 does hardware interpretation of pagetables, so pte_clear() can't be
    used on present ptes, as it sets the upper half of the hugepte prior to
    setting the lower half (which includes the valid bit).  i.e.  there is a
    window where having a hugepage mapped at 56GB and doing pte_clear() in
    unmap_hugepage_range() allows other threads of the process to see a
    hugepage at 0 in place of the original hugepage at 56GB.
    
    This patch corrects the situation by using ptep_get_and_clear(), which
    clears the lower word of the pte prior to clearing the upper word.
    
    There is another nasty where huge_page_release() needs to wait for TLB
    flushes before returning the hugepages to the free pool, analogous to the
    issue tlb_remove_page() and tlb_flush_mm() repair.
    57a3170c
hugetlbpage.c 5.75 KB