diff -ruN postgresql-8.0.3-old/src/backend/storage/lmgr/s_lock.c postgresql-8.0.3/src/backend/storage/lmgr/s_lock.c --- postgresql-8.0.3-old/src/backend/storage/lmgr/s_lock.c 2004-12-31 23:01:05.000000000 +0100 +++ postgresql-8.0.3/src/backend/storage/lmgr/s_lock.c 2005-08-20 17:32:15.000000000 +0200 @@ -172,7 +172,7 @@ #endif /* __m68k__ */ -#if defined(__mips__) && !defined(__sgi) +#if defined(__mips__) && !defined(__sgi) && !defined(__linux__) static void tas_dummy() { diff -ruN postgresql-8.0.3-old/src/include/storage/s_lock.h postgresql-8.0.3/src/include/storage/s_lock.h --- postgresql-8.0.3-old/src/include/storage/s_lock.h 2005-08-20 17:30:57.000000000 +0200 +++ postgresql-8.0.3/src/include/storage/s_lock.h 2005-08-20 17:32:15.000000000 +0200 @@ -367,6 +367,33 @@ #endif /* __vax__ */ +#if defined(__mips__) && defined(__linux__) +#define TAS(lock) tas(lock) + +static __inline__ int +tas(volatile slock_t *lock) +{ + register volatile slock_t *__l = lock; + register int __r; + + __asm__ __volatile__( + " .set push \n" + " .set mips2 \n" + " .set noreorder \n" + " .set nomacro \n" + "1: ll %0, %1 \n" + " bne %0, $0, 1f \n" + " xori %0, 1 \n" + " sc %0, %1 \n" + " beq %0, $0, 1b \n" + " sync \n" + "1: .set pop " + : "=&r" (__r), "+R" (*__l)); + return __r; +} + +#endif /* mips */ + #if defined(__ns32k__) #define HAS_TEST_AND_SET