• Naoya Horiguchi's avatar
    mm/memory-failure.c: support use of a dedicated thread to handle SIGBUS(BUS_MCEERR_AO) · 3ba08129
    Naoya Horiguchi authored
    Currently memory error handler handles action optional errors in the
    deferred manner by default.  And if a recovery aware application wants
    to handle it immediately, it can do it by setting PF_MCE_EARLY flag.
    However, such signal can be sent only to the main thread, so it's
    problematic if the application wants to have a dedicated thread to
    handler such signals.
    
    So this patch adds dedicated thread support to memory error handler.  We
    have PF_MCE_EARLY flags for each thread separately, so with this patch
    AO signal is sent to the thread with PF_MCE_EARLY flag set, not the main
    thread.  If you want to implement a dedicated thread, you call prctl()
    to set PF_MCE_EARLY on the thread.
    
    Memory error handler collects processes to be killed, so this patch lets
    it check PF_MCE_EARLY flag on each thread in the collecting routines.
    
    No behavioral change for all non-early kill cases.
    
    Tony said:
    
    : The old behavior was crazy - someone with a multithreaded process might
    : well expect that if they call prctl(PF_MCE_EARLY) in just one thread, then
    : that thread would see the SIGBUS with si_code = BUS_MCEERR_A0 - even if
    : that thread wasn't the main thread for the process.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: 's avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Reviewed-by: 's avatarTony Luck <tony.luck@intel.com>
    Cc: Kamil Iskra <iskra@mcs.anl.gov>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Chen Gong <gong.chen@linux.jf.intel.com>
    Cc: <stable@vger.kernel.org>	[3.2+]
    Signed-off-by: 's avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    3ba08129