#ifdef CONFIG_PREEMPT
etrap_irq: ldsw [%g6 + TI_PRE_COUNT], %g1
add %g1, 1, %g1
- ba,pt etrap_irq2
+ ba,pt %xcc, etrap_irq2
stw %g1, [%g6 + TI_PRE_COUNT]
#endif
etrap: rdpr %pil, %g2 ! Single Group
#ifndef CONFIG_PREEMPT
-etrap_irq
+etrap_irq:
#endif
etrap_irq2: rdpr %tstate, %g1 ! Single Group
sllx %g2, 20, %g3 ! IEU0 Group
* Copyright (C) 2000 David S. Miller (davem@redhat.com)
*/
#include <linux/config.h>
+#include <asm/thread_info.h>
#ifndef CONFIG_DEBUG_SPINLOCK
.text
membar #StoreLoad | #StoreStore
retl
mov %g1, %o0
+#ifdef CONFIG_PREEMPT
+ ldsw [%g6 + TI_PRE_COUNT], %g3
+ add %g3, 1, %g3
+ stw %g3, [%g6 + TI_PRE_COUNT]
+#endif
to_zero:
ldstub [%o1], %g3
brnz,pn %g3, spin_on_lock
nop
membar #StoreStore | #LoadStore
stb %g0, [%o1]
+#ifdef CONFIG_PREEMPT
+ ldsw [%g6 + TI_PRE_COUNT], %g3
+ sub %g3, 1, %g3
+ stw %g3, [%g6 + TI_PRE_COUNT]
+#endif
b,pt %xcc, nzero
nop