X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=arch%2Farch.h;h=30c0d2056d3eaa7abcffd5cd703f698d99790edd;hp=4fb9b518085aeeae06a390874ee35346ad5ef9b7;hb=HEAD;hpb=e6fe02651641fc64d2fa4fcfe9b1013b2947d11b diff --git a/arch/arch.h b/arch/arch.h index 4fb9b518..7e294ddf 100644 --- a/arch/arch.h +++ b/arch/arch.h @@ -1,6 +1,12 @@ #ifndef ARCH_H #define ARCH_H +#ifdef __cplusplus +#include +#else +#include +#endif + #include "../lib/types.h" enum { @@ -17,6 +23,8 @@ enum { arch_hppa, arch_mips, arch_aarch64, + arch_loongarch64, + arch_riscv64, arch_generic, @@ -34,6 +42,37 @@ extern unsigned long arch_flags; #define ARCH_CPU_CLOCK_WRAPS +#ifdef __cplusplus +#define atomic_add(p, v) \ + std::atomic_fetch_add(p, (v)) +#define atomic_sub(p, v) \ + std::atomic_fetch_sub(p, (v)) +#define atomic_load_relaxed(p) \ + std::atomic_load_explicit(p, \ + std::memory_order_relaxed) +#define atomic_load_acquire(p) \ + std::atomic_load_explicit(p, \ + std::memory_order_acquire) +#define atomic_store_release(p, v) \ + std::atomic_store_explicit(p, (v), \ + std::memory_order_release) +#else +#define atomic_add(p, v) \ + atomic_fetch_add((_Atomic typeof(*(p)) *)(p), v) +#define atomic_sub(p, v) \ + atomic_fetch_sub((_Atomic typeof(*(p)) *)(p), v) +#define atomic_load_relaxed(p) \ + atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \ + memory_order_relaxed) +#define atomic_load_acquire(p) \ + atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \ + memory_order_acquire) +#define atomic_store_release(p, v) \ + atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v), \ + memory_order_release) +#endif + +/* IWYU pragma: begin_exports */ #if defined(__i386__) #include "arch-x86.h" #elif defined(__x86_64__) @@ -60,12 +99,24 @@ extern unsigned long arch_flags; #include "arch-hppa.h" #elif defined(__aarch64__) #include "arch-aarch64.h" +#elif defined(__loongarch64) +#include "arch-loongarch64.h" +#elif defined(__riscv) && __riscv_xlen == 64 +#include "arch-riscv64.h" #else #warning "Unknown architecture, attempting to use generic model." #include "arch-generic.h" #endif +#if !defined(__x86_64__) && defined(CONFIG_SYNC_SYNC) +static inline void tsc_barrier(void) +{ + __sync_synchronize(); +} +#endif + #include "../lib/ffz.h" +/* IWYU pragma: end_exports */ #ifndef ARCH_HAVE_INIT static inline int arch_init(char *envp[]) @@ -74,4 +125,32 @@ static inline int arch_init(char *envp[]) } #endif +#ifdef __alpha__ +/* + * alpha is the only exception, all other architectures + * have common numbers for new system calls. + */ +# ifndef __NR_io_uring_setup +# define __NR_io_uring_setup 535 +# endif +# ifndef __NR_io_uring_enter +# define __NR_io_uring_enter 536 +# endif +# ifndef __NR_io_uring_register +# define __NR_io_uring_register 537 +# endif +#else /* !__alpha__ */ +# ifndef __NR_io_uring_setup +# define __NR_io_uring_setup 425 +# endif +# ifndef __NR_io_uring_enter +# define __NR_io_uring_enter 426 +# endif +# ifndef __NR_io_uring_register +# define __NR_io_uring_register 427 +# endif +#endif + +#define ARCH_HAVE_IOURING + #endif