• J
    mm/mmu_notifier: kill invalidate_page · 5f32b265
    Jérôme Glisse 提交于
    The invalidate_page callback suffered from two pitfalls.  First it used
    to happen after the page table lock was release and thus a new page
    might have setup before the call to invalidate_page() happened.
    
    This is in a weird way fixed by commit c7ab0d2f ("mm: convert
    try_to_unmap_one() to use page_vma_mapped_walk()") that moved the
    callback under the page table lock but this also broke several existing
    users of the mmu_notifier API that assumed they could sleep inside this
    callback.
    
    The second pitfall was invalidate_page() being the only callback not
    taking a range of address in respect to invalidation but was giving an
    address and a page.  Lots of the callback implementers assumed this
    could never be THP and thus failed to invalidate the appropriate range
    for THP.
    
    By killing this callback we unify the mmu_notifier callback API to
    always take a virtual address range as input.
    
    Finally this also simplifies the end user life as there is now two clear
    choices:
      - invalidate_range_start()/end() callback (which allow you to sleep)
      - invalidate_range() where you can not sleep but happen right after
        page table update under page table lock
    Signed-off-by: NJérôme Glisse <jglisse@redhat.com>
    Cc: Bernhard Held <berny156@gmx.de>
    Cc: Adam Borowski <kilobyte@angband.pl>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Wanpeng Li <kernellwp@gmail.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Takashi Iwai <tiwai@suse.de>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: axie <axie@amd.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    5f32b265
mmu_notifier.c 11.2 KB