• Ingo Molnar's avatar
    [PATCH] i386: break out of recursion in stackframe walk · b88d4f1d
    Ingo Molnar authored
    If CONFIG_FRAME_POINTERS is enabled, and one does a dump_stack() during
    early SMP init, an infinite stackdump and a bootup hang happens:
    
     [<c0104e7f>] show_trace+0xd/0xf
     [<c0104e96>] dump_stack+0x15/0x17
     [<c01440df>] save_trace+0xc3/0xce
     [<c014527d>] mark_lock+0x8c/0x4fe
     [<c0145df5>] __lockdep_acquire+0x44e/0xaa5
     [<c0146798>] lockdep_acquire+0x68/0x84
     [<c1048699>] _spin_lock+0x21/0x2f
     [<c010d918>] prepare_set+0xd/0x5d
     [<c010daa8>] generic_set_all+0x1d/0x201
     [<c010ca9a>] mtrr_ap_init+0x23/0x3b
     [<c010ada8>] identify_cpu+0x2a7/0x2af
     [<c01192a7>] smp_store_cpu_info+0x2f/0xb4
     [<c01197d0>] start_secondary+0xb5/0x3ec
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [<c104ec11>] end_of_stack_stop_unwind_function+0x1/0x4
     [...]
    
    Due to "end_of_stack_stop_unwind_function" recursing back to itself in the
    EBP stackframe-walker.  So avoid this type of recursion when walking the
    stack .
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    b88d4f1d
traps.c 31 KB