X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=arch%2Farch-alpha.h;h=e204368389aaec880c0a840ab30fc49fa0235645;hb=edf2c6cf5adc82ee43c81e033cf2215eb9ffdb16;hp=a476891aecf4cbe4268a4c617e41c4aa33526905;hpb=db6defc77508f5bf217f0a6768d13426eee21119;p=fio.git diff --git a/arch/arch-alpha.h b/arch/arch-alpha.h index a476891a..e2043683 100644 --- a/arch/arch-alpha.h +++ b/arch/arch-alpha.h @@ -12,8 +12,43 @@ #define __NR_fadvise64 413 #endif -#define nop do { } while (0) -#define fio_ffz(v) generic_ffz((v)) -#define read_barrier() __asm__ __volatile__("mb": : :"memory") +#ifndef __NR_sys_splice +#define __NR_sys_splice 468 +#define __NR_sys_tee 470 +#define __NR_sys_vmsplice 471 +#endif + +#define nop do { } while (0) +#define read_barrier() __asm__ __volatile__("mb": : :"memory") +#define writer_barrier() __asm__ __volatile__("wmb": : :"memory") + +typedef struct { + volatile unsigned int lock; +} spinlock_t; + +static inline void spin_lock(spinlock_t *lock) +{ + long tmp; + + __asm__ __volatile__("1: ldl_l %0,%1\n" + " bne %0,2f\n" + " lda %0,1\n" + " stl_c %0,%1\n" + " beq %0,2f\n" + " mb\n" + ".subsection 2\n" + "2: ldl %0,%1\n" + " bne %0,2b\n" + " br 1b\n" + ".previous" + : "=&r" (tmp), "=m" (lock->lock) + : "m"(lock->lock) : "memory"); +} + +static inline void spin_unlock(spinlock_t *lock) +{ + read_barrier(); + lock->lock = 0; +} #endif