Commit 25654207 authored by Ani Sinha's avatar Ani Sinha Committed by Kamal Mostafa

sysrq: Fix warning in sysrq generated crash.

commit 984cf355 upstream.

Commit 984d74a7 ("sysrq: rcu-ify __handle_sysrq") replaced
spin_lock_irqsave() calls with rcu_read_lock() calls in sysrq. Since
rcu_read_lock() does not disable preemption, faulthandler_disabled() in
__do_page_fault() in x86/fault.c returns false. When the code later calls
might_sleep() in the pagefault handler, we get the following warning:

BUG: sleeping function called from invalid context at ../arch/x86/mm/fault.c:1187
in_atomic(): 0, irqs_disabled(): 0, pid: 4706, name: bash
Preemption disabled at:[<ffffffff81484339>] printk+0x48/0x4a

To fix this, we release the RCU read lock before we crash.

Tested this patch on linux 3.18 by booting off one of our boards.

Fixes: 984d74a7 ("sysrq: rcu-ify __handle_sysrq")
Signed-off-by: default avatarAni Sinha <ani@arista.com>
Reviewed-by: default avatarRik van Riel <riel@redhat.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
parent c2505e71
...@@ -133,6 +133,12 @@ static void sysrq_handle_crash(int key) ...@@ -133,6 +133,12 @@ static void sysrq_handle_crash(int key)
{ {
char *killer = NULL; char *killer = NULL;
/* we need to release the RCU read lock here,
* otherwise we get an annoying
* 'BUG: sleeping function called from invalid context'
* complaint from the kernel before the panic.
*/
rcu_read_unlock();
panic_on_oops = 1; /* force panic */ panic_on_oops = 1; /* force panic */
wmb(); wmb();
*killer = 1; *killer = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment