]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
ARC: show_regs: lockdep: avoid page allocator...
authorVineet Gupta <vgupta@synopsys.com>
Mon, 17 Dec 2018 22:11:19 +0000 (14:11 -0800)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 2 May 2019 20:41:24 +0000 (21:41 +0100)
commita744a2068e359af0818452e1eed8ff61baee9da2
treebadb650529963aa67622ee36d36414275a36b07e
parent1652b06917d7ed6fcdf9a705afa7f8788060bedd
ARC: show_regs: lockdep: avoid page allocator...

commit ab6c03676cb190156603cf4c5ecf97aa406c9c53 upstream.

and use smaller/on-stack buffer instead

The motivation for this change was lockdep splat like below.

| potentially unexpected fatal signal 11.
| BUG: sleeping function called from invalid context at ../mm/page_alloc.c:4317
| in_atomic(): 1, irqs_disabled(): 0, pid: 57, name: segv
| no locks held by segv/57.
| Preemption disabled at:
| [<8182f17e>] get_signal+0x4a6/0x7c4
| CPU: 0 PID: 57 Comm: segv Not tainted 4.17.0+ #23
|
| Stack Trace:
|  arc_unwind_core.constprop.1+0xd0/0xf4
|  __might_sleep+0x1f6/0x234
|  __get_free_pages+0x174/0xca0
|  show_regs+0x22/0x330
|  get_signal+0x4ac/0x7c4     # print_fatal_signals() -> preempt_disable()
|  do_signal+0x30/0x224
|  resume_user_mode_begin+0x90/0xd8

So signal handling core calls show_regs() with preemption disabled but
an ensuing GFP_KERNEL page allocator call is flagged by lockdep.

We could have switched to GFP_NOWAIT, but turns out that is not enough
anways and eliding page allocator call leads to less code and
instruction traces to sift thru when debugging pesky crashes.

FWIW, this patch doesn't cure the lockdep splat (which next patch does).

Reviewed-by: William Kucharski <william.kucharski@oracle.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/arc/kernel/troubleshoot.c