Revert "Remove unused define"
[fio.git] / arch / arch-s390.h
index 5e13155951111876c6878b8a707c037970ece2ea..8c6fa5ef2e5a92b0cbf391a8ca9a17efa663148a 100644 (file)
 #define __NR_fadvise64         253
 #endif
 
+#ifndef __NR_sys_splice
+#define __NR_sys_splice                306
+#define __NR_sys_tee           308
+#define __NR_sys_vmsplice      309
+#endif
+
 #define nop            asm volatile ("diag 0,0,68" : : : "memory")
-#define fio_ffz(v)     generic_ffz((v))
 #define read_barrier() asm volatile("bcr 15,0" : : : "memory")
+#define write_barrier()        asm volatile("bcr 15,0" : : : "memory")
+
+typedef struct {
+       volatile unsigned int lock;
+} spinlock_t;
+
+static inline int
+_raw_compare_and_swap(volatile unsigned int *lock,
+                     unsigned int old, unsigned int new)
+{
+       __asm__ __volatile__(
+               "       cs      %0,%3,0(%4)"
+               : "=d" (old), "=m" (*lock)
+               : "0" (old), "d" (new), "a" (lock), "m" (*lock)
+               : "cc", "memory" );
+
+       return old;
+}
+
+static inline void spin_lock(spinlock_t *lock)
+{
+       if (!_raw_compare_and_swap(&lock->lock, 0, 0x80000000))
+               return;
+
+       while (1) {
+               if (lock->lock)
+                       continue;
+               if (!_raw_compare_and_swap(&lock->lock, 0, 0x80000000))
+                       break;
+       }
+}
+
+static inline void spin_unlock(spinlock_t *lock)
+{
+        _raw_compare_and_swap(&lock->lock, 0x80000000, 0);
+}
 
 #endif