--- zzzz-none-000/linux-2.4.17/include/asm-ppc/spinlock.h 2001-08-28 13:58:33.000000000 +0000 +++ sangam-fb-322/linux-2.4.17/include/asm-ppc/spinlock.h 2004-11-24 13:21:50.000000000 +0000 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.spinlock.h 1.9 08/21/01 16:07:48 trini + * BK Id: SCCS/s.spinlock.h 1.15 10/30/01 07:58:36 boutcher */ #ifndef __ASM_SPINLOCK_H #define __ASM_SPINLOCK_H @@ -35,19 +35,22 @@ #ifndef SPINLOCK_DEBUG -static inline void spin_lock(spinlock_t *lock) +static inline void _raw_spin_lock(spinlock_t *lock) { unsigned long tmp; __asm__ __volatile__( "b 1f # spin_lock\n\ -2: lwzx %0,0,%1\n\ +2: or 1,1,1 # spin at low priority\n\ + lwzx %0,0,%1\n\ cmpwi 0,%0,0\n\ bne+ 2b\n\ + or 2,2,2 # back to medium priority\n\ 1: lwarx %0,0,%1\n\ cmpwi 0,%0,0\n\ - bne- 2b\n\ - stwcx. %2,0,%1\n\ + bne- 2b\n" + PPC405_ERR77(0,%1) +" stwcx. %2,0,%1\n\ bne- 2b\n\ isync" : "=&r"(tmp) @@ -55,13 +58,13 @@ : "cr0", "memory"); } -static inline void spin_unlock(spinlock_t *lock) +static inline void _raw_spin_unlock(spinlock_t *lock) { __asm__ __volatile__("eieio # spin_unlock": : :"memory"); lock->lock = 0; } -#define spin_trylock(lock) (!test_and_set_bit(0,(lock))) +#define _raw_spin_trylock(lock) (!test_and_set_bit(0,(lock))) #else @@ -103,19 +106,22 @@ #ifndef SPINLOCK_DEBUG -static __inline__ void read_lock(rwlock_t *rw) +static __inline__ void _raw_read_lock(rwlock_t *rw) { unsigned int tmp; __asm__ __volatile__( "b 2f # read_lock\n\ -1: lwzx %0,0,%1\n\ +1: or 1,1,1 # spin at low priority\n\ + lwzx %0,0,%1\n\ cmpwi 0,%0,0\n\ blt+ 1b\n\ + or 2,2,2 # back to medium priority\n\ 2: lwarx %0,0,%1\n\ addic. %0,%0,1\n\ - ble- 1b\n\ - stwcx. %0,0,%1\n\ + ble- 1b\n" + PPC405_ERR77(0,%1) +" stwcx. %0,0,%1\n\ bne- 2b\n\ isync" : "=&r"(tmp) @@ -123,34 +129,38 @@ : "cr0", "memory"); } -static __inline__ void read_unlock(rwlock_t *rw) +static __inline__ void _raw_read_unlock(rwlock_t *rw) { unsigned int tmp; __asm__ __volatile__( "eieio # read_unlock\n\ 1: lwarx %0,0,%1\n\ - addic %0,%0,-1\n\ - stwcx. %0,0,%1\n\ + addic %0,%0,-1\n" + PPC405_ERR77(0,%1) +" stwcx. %0,0,%1\n\ bne- 1b" : "=&r"(tmp) : "r"(&rw->lock) : "cr0", "memory"); } -static __inline__ void write_lock(rwlock_t *rw) +static __inline__ void _raw_write_lock(rwlock_t *rw) { unsigned int tmp; __asm__ __volatile__( "b 2f # write_lock\n\ -1: lwzx %0,0,%1\n\ +1: or 1,1,1 # spin at low priority\n\ + lwzx %0,0,%1\n\ cmpwi 0,%0,0\n\ bne+ 1b\n\ + or 2,2,2 # back to medium priority\n\ 2: lwarx %0,0,%1\n\ cmpwi 0,%0,0\n\ - bne- 1b\n\ - stwcx. %2,0,%1\n\ + bne- 1b\n" + PPC405_ERR77(0,%1) +" stwcx. %2,0,%1\n\ bne- 2b\n\ isync" : "=&r"(tmp) @@ -158,7 +168,7 @@ : "cr0", "memory"); } -static __inline__ void write_unlock(rwlock_t *rw) +static __inline__ void _raw_write_unlock(rwlock_t *rw) { __asm__ __volatile__("eieio # write_unlock": : :"memory"); rw->lock = 0;