}
#define ARCH_HAVE_FFZ
+typedef struct {
+ volatile unsigned int lock;
+} spinlock_t;
+
+static inline void spin_trylock(spinlock_t *lock)
+{
+ unsigned long tmp;
+
+ __asm__ __volatile__(
+ "1: lwarx %0,0,%2\n\
+ cmpwi 0,%0,0\n\
+ bne- 2f\n\
+ stwcx. 1,0,%2\n\
+ bne- 1b\n\
+ isync\n\
+ 2:" : "=&r" (tmp)
+ : (&lock->lock)
+ : "cr0", "memory");
+
+ return tmp;
+}
+
+static inline void spin_lock(spinlock_t *lock)
+{
+ while (spin_trylock(lock))
+ ;
+}
+
+static inline void spin_unlock(spinlock_t *lock)
+{
+ read_barrier();
+ lock->lock = 0;
+}
+
#endif