• Li Zhong's avatar
    x86/nmi: Fix page faults by nmiaction if kmemcheck is enabled · 72b3fb24
    Li Zhong authored
    This patch tries to fix the problem of page fault exception
    caused by accessing nmiaction structure in nmi if kmemcheck
    is enabled.
    
    If kmemcheck is enabled, the memory allocated through slab are
    in pages that are marked non-present, so that some checks could
    be done in the page fault handling code ( e.g. whether the
    memory is read before written to ).
    
    As nmiaction is allocated in this way, so it resides in a
    non-present page. Then there is a page fault while the nmi code
    accessing the nmiaction structure, which would then cause a
    warning by WARN_ON_ONCE(in_nmi()) in kmemcheck_fault(), called
    by do_page_fault().
    
    This significantly simplifies the code as well, as the whole
    dynamic allocation dance goes away.
    
    v2: as Peter suggested, changed the nmiaction to use static
        storage.
    
    v3: as Peter suggested, use macro to shorten the codes. Also
        keep the original usage of register_nmi_handler, so users of
        this call doesn't need change.
    Tested-by: default avatarSeiji Aguchi <seiji.aguchi@hds.com>
    Fixes: https://lkml.org/lkml/2012/3/2/356Signed-off-by: default avatarLi Zhong <zhong@linux.vnet.ibm.com>
    [ simplified the wrappers ]
    Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: thomas.mingarelli@hp.com
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Link: http://lkml.kernel.org/r/1333051877-15755-4-git-send-email-dzickus@redhat.com
    [ tidied the patch a bit ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    72b3fb24
nmi.c 13.6 KB