• Vineet Gupta's avatar
    ARC: show_regs: lockdep: avoid page allocator... · 4749ffdf
    Vineet Gupta authored
    [ Upstream commit ab6c0367 ]
    
    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>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    4749ffdf
troubleshoot.c 6.29 KB