• K
    mm: allow page_cache_get_speculative in interrupt context · 1ee1c3f5
    Kan Liang 提交于
    Kernel panic when calling the IRQ-safe __get_user_pages_fast in NMI
    handler.
    
    The bug was introduced by commit 2947ba05 ("x86/mm/gup: Switch GUP
    to the generic get_user_page_fast() implementation").
    
    The original x86 __get_user_page_fast used plain get_page() or
    page_ref_add().  However, the generic __get_user_page_fast uses
    page_cache_get_speculative(), which has VM_BUG_ON(in_interrupt()).
    
    There is no reason to prevent page_cache_get_speculative from using in
    interrupt context.  According to the author, putting a BUG_ON there is
    just because the code is not verifying correctness of interrupt races.
    I did some tests in interrupt context.  There is no issue found.
    
    Removing VM_BUG_ON(in_interrupt()) for page_cache_get_speculative().
    
    Link: http://lkml.kernel.org/r/1501609146-59730-1-git-send-email-kan.liang@intel.com
    Fixes: 2947ba05 ("x86/mm/gup: Switch GUP to the generic get_user_page_fast() implementation")
    Signed-off-by: NKan Liang <kan.liang@intel.com>
    Cc: Jens Axboe <axboe@fb.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Ying Huang <ying.huang@intel.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1ee1c3f5
pagemap.h 18.4 KB