[PATCH] Xmon bug fix for soft-reset
For soft reset during system hang, got an error "CPU did not take control" for some CPUs even though they responded to soft-reset (called SystemReset, die and called debugger - xmon). First these CPUs entered into xmon by IPI callback and then got a soft-reset exception and re-entered into xmon again. The first CPU which re-entered into xmon got the output lock and made into xmon successfully without unlocking. Hence, the next CPU(s) which re-entered into xmon try to acquire a lock (get_output_lock). Therefore, we can not view state of those CPU(s). [This is a simple, very low risk, obvious fix for an obvious bug, and should go into 2.6.13. -- paulus] Signed-off-by: Haren Myneni <hbabu@us.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0b2bfb4e7f
commit
5cb4cc0d82
|
@ -329,13 +329,16 @@ int xmon_core(struct pt_regs *regs, int fromipi)
|
|||
printf("cpu 0x%x: Exception %lx %s in xmon, "
|
||||
"returning to main loop\n",
|
||||
cpu, regs->trap, getvecname(TRAP(regs)));
|
||||
release_output_lock();
|
||||
longjmp(xmon_fault_jmp[cpu], 1);
|
||||
}
|
||||
|
||||
if (setjmp(recurse_jmp) != 0) {
|
||||
if (!in_xmon || !xmon_gate) {
|
||||
get_output_lock();
|
||||
printf("xmon: WARNING: bad recursive fault "
|
||||
"on cpu 0x%x\n", cpu);
|
||||
release_output_lock();
|
||||
goto waiting;
|
||||
}
|
||||
secondary = !(xmon_taken && cpu == xmon_owner);
|
||||
|
|
Loading…
Reference in a new issue