X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=arch%2Farch-s390.h;h=2c205de3a8455f04b1b9a5729b63dce70547aa61;hp=8c6fa5ef2e5a92b0cbf391a8ca9a17efa663148a;hb=919e789d0999bf13ef1ae670c536d2aef3709894;hpb=69ebbd397e80b23ec4281c99e9f7242a089cc771 diff --git a/arch/arch-s390.h b/arch/arch-s390.h index 8c6fa5ef..2c205de3 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,27 @@ #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) +/* + * Fio needs monotonic (never lower), but not strict monotonic (never the same) + * so store clock fast is enough + */ +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__("stckf %0" : "=Q" (clk) : : "cc"); + return clk>>12; } -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; - } -} +#define ARCH_CPU_CLOCK_CYCLES_PER_USEC 1 +#define ARCH_HAVE_CPU_CLOCK -static inline void spin_unlock(spinlock_t *lock) +#define ARCH_HAVE_INIT +extern int tsc_reliable; +static inline int arch_init(char *envp[]) { - _raw_compare_and_swap(&lock->lock, 0x80000000, 0); + tsc_reliable = 1; + return 0; } #endif