• Vineet Gupta's avatar
    ARC: show_regs: lockdep: avoid page allocator... · ab6c0367
    Vineet Gupta authored
    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: default avatarWilliam Kucharski <william.kucharski@oracle.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    ab6c0367
troubleshoot.c 6.29 KB