• Rik van Riel's avatar
    sysrq: rcu-ify __handle_sysrq · 984d74a7
    Rik van Riel authored
    Echoing values into /proc/sysrq-trigger seems to be a popular way to get
    information out of the kernel.  However, dumping information about
    thousands of processes, or hundreds of CPUs to serial console can result
    in IRQs being blocked for minutes, resulting in various kinds of cascade
    failures.
    
    The most common failure is due to interrupts being blocked for a very
    long time.  This can lead to things like failed IO requests, and other
    things the system cannot easily recover from.
    
    This problem is easily fixable by making __handle_sysrq use RCU instead
    of spin_lock_irqsave.
    
    This leaves the warning that RCU grace periods have not elapsed for a
    long time, but the system will come back from that automatically.
    
    It also leaves sysrq-from-irq-context when the sysrq keys are pressed,
    but that is probably desired since people want that to work in
    situations where the system is already hosed.
    
    The callers of register_sysrq_key and unregister_sysrq_key appear to be
    capable of sleeping.
    Signed-off-by: default avatarRik van Riel <riel@redhat.com>
    Reported-by: default avatarMadper Xie <cxie@redhat.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    984d74a7
sysrq.c 25.9 KB