X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=arch%2Farch-alpha.h;h=e204368389aaec880c0a840ab30fc49fa0235645;hp=2b6832018f76baedcaea13e41bcf69f1f4c6e648;hb=edf2c6cf5adc82ee43c81e033cf2215eb9ffdb16;hpb=697a606cc0af1c39ac18998c344a522199accb36 diff --git a/arch/arch-alpha.h b/arch/arch-alpha.h index 2b683201..e2043683 100644 --- a/arch/arch-alpha.h +++ b/arch/arch-alpha.h @@ -12,7 +12,43 @@ #define __NR_fadvise64 413 #endif -#define nop do { } while (0) -#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