From: Haren Myneni <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
---
--- linux-2.6.13-rc4-git4/arch/ppc64/xmon/xmon.c.orig   2005-08-01 
22:31:09.000000000 -0700
+++ linux-2.6.13-rc4-git4/arch/ppc64/xmon/xmon.c        2005-08-01 
22:33:16.000000000 -0700
@@ -329,13 +329,16 @@ int xmon_core(struct pt_regs *regs, int 
                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);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to