X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=arch%2Farch-s390.h;h=6bf033b00a84d4208ec5f83a0b084d5cf961ed07;hb=b9c153b9023c3de65f01aeac4d1e993986a7107e;hp=8c6fa5ef2e5a92b0cbf391a8ca9a17efa663148a;hpb=69ebbd397e80b23ec4281c99e9f7242a089cc771;p=fio.git diff --git a/arch/arch-s390.h b/arch/arch-s390.h index 8c6fa5ef..6bf033b0 100644 --- a/arch/arch-s390.h +++ b/arch/arch-s390.h @@ -1,60 +1,38 @@ #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 -#define __NR_ioprio_get 283 -#endif - -#ifndef __NR_fadvise64 -#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 nop asm volatile("nop" : : : "memory") #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" ); - - return old; + unsigned long long clk; + +#ifdef CONFIG_S390_Z196_FACILITIES + /* + * Fio needs monotonic (never lower), but not strict monotonic (never + * the same) so store clock fast is enough. + */ + __asm__ __volatile__("stckf %0" : "=Q" (clk) : : "cc"); +#else + __asm__ __volatile__("stck %0" : "=Q" (clk) : : "cc"); +#endif + 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 +#undef ARCH_CPU_CLOCK_WRAPS -static inline void spin_unlock(spinlock_t *lock) +#define ARCH_HAVE_INIT +extern bool tsc_reliable; +static inline int arch_init(char *envp[]) { - _raw_compare_and_swap(&lock->lock, 0x80000000, 0); + tsc_reliable = true; + return 0; } #endif