From: Dennis Gilmore <dennis@xxxxxxxx> Date: Wed, 1 Nov 2006 14:49:37 -0600 > I have had my T1000 lockup intermittently. I'm running a vanilla 2.6.18 > kernel. I get in the system logs for quite a few of the cpu's > > Oct 31 20:58:19 daedalus kernel: BUG: soft lockup detected on CPU#21! > Oct 31 20:58:19 daedalus kernel: Call Trace: > Oct 31 20:58:20 daedalus kernel: [00000000004319f4] > smp_percpu_timer_interrupt+0xd4/0x144 > Oct 31 20:58:20 daedalus kernel: [00000000004109d4] tl0_irq14+0x1c/0x20 > Oct 31 20:58:20 daedalus kernel: [0000000000468f28] futex_lock_pi+0x130/0x7cc > Oct 31 20:58:20 daedalus kernel: [000000000046a154] do_futex+0xb90/0xbbc > Oct 31 20:58:20 daedalus kernel: [000000000046a6f4] > compat_sys_futex+0x11c/0x130 > Oct 31 20:58:20 daedalus kernel: [0000000000406c94] > linux_sparc_syscall32+0x3c/0x40 > Oct 31 20:58:20 daedalus kernel: [00000000701004b0] 0x701004b8 > > after these. while the system stays alive I cant actually do anything I think Fabbione was seeing this one too, CC:'d for more testing. This patch below should fix it, thanks for the most excellent bug report. diff --git a/include/asm-sparc64/futex.h b/include/asm-sparc64/futex.h index dee4020..7392fc4 100644 --- a/include/asm-sparc64/futex.h +++ b/include/asm-sparc64/futex.h @@ -87,24 +87,22 @@ static inline int futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) { __asm__ __volatile__( - "\n1: lduwa [%2] %%asi, %0\n" - "2: casa [%2] %%asi, %0, %1\n" - "3:\n" + "\n1: casa [%3] %%asi, %2, %0\n" + "2:\n" " .section .fixup,#alloc,#execinstr\n" " .align 4\n" - "4: ba 3b\n" - " mov %3, %0\n" + "3: ba 2b\n" + " mov %4, %0\n" " .previous\n" " .section __ex_table,\"a\"\n" " .align 4\n" - " .word 1b, 4b\n" - " .word 2b, 4b\n" + " .word 1b, 3b\n" " .previous\n" - : "=&r" (oldval) - : "r" (newval), "r" (uaddr), "i" (-EFAULT) + : "=r" (newval) + : "0" (newval), "r" (oldval), "r" (uaddr), "i" (-EFAULT) : "memory"); - return oldval; + return newval; } #endif /* !(_SPARC64_FUTEX_H) */ - To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html