X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=arch%2Farch-s390.h;h=bcd91636d04d8e6e3bd2137672377f84813cd57e;hb=bc4f5ef67d26ef98f4822d5f798cb8c4e2d2fce5;hp=8c6fa5ef2e5a92b0cbf391a8ca9a17efa663148a;hpb=69ebbd397e80b23ec4281c99e9f7242a089cc771;p=fio.git diff --git a/arch/arch-s390.h b/arch/arch-s390.h index 8c6fa5ef..bcd91636 100644 --- a/arch/arch-s390.h +++ b/arch/arch-s390.h @@ -1,7 +1,7 @@ #ifndef ARCH_S390_H #define ARCH_S390_H -#define ARCH (arch_s390) +#define FIO_ARCH (arch_s390) #ifndef __NR_ioprio_set #define __NR_ioprio_set 282 @@ -22,39 +22,22 @@ #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) +static inline unsigned long long get_cpu_clock(void) { - __asm__ __volatile__( - " cs %0,%3,0(%4)" - : "=d" (old), "=m" (*lock) - : "0" (old), "d" (new), "a" (lock), "m" (*lock) - : "cc", "memory" ); + unsigned long long clk; - return old; + __asm__ __volatile__("stck %0" : "=Q" (clk) : : "cc"); + return clk; } -static inline void spin_lock(spinlock_t *lock) +#define ARCH_HAVE_INIT +extern int tsc_reliable; +static inline int arch_init(char *envp[]) { - 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; - } + tsc_reliable = 1; + return 0; } -static inline void spin_unlock(spinlock_t *lock) -{ - _raw_compare_and_swap(&lock->lock, 0x80000000, 0); -} +#define ARCH_HAVE_CPU_CLOCK #endif