ARC: show_regs: lockdep: avoid page allocator...
authorVineet Gupta <vgupta@synopsys.com>
Mon, 17 Dec 2018 22:11:19 +0000 (14:11 -0800)
committerVineet Gupta <vgupta@synopsys.com>
Thu, 17 Jan 2019 22:38:00 +0000 (14:38 -0800)
commitab6c03676cb190156603cf4c5ecf97aa406c9c53
treefd5b904be3253e9a1aae3af7ebda79b4bcf92399
parent29133260f7c2e4ce50b4da6bf0674331bc0a4da5
ARC: show_regs: lockdep: avoid page allocator...

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>
arch/arc/kernel/troubleshoot.c