From: Jens Axboe Date: Thu, 26 Aug 2021 14:46:36 +0000 (-0600) Subject: Merge branch 'wip-cxx' of https://github.com/tchaikov/fio X-Git-Tag: fio-3.28~21 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=7f02f21f53ccd5e2448086f8e9015489693dd2dc;hp=15ce99bb71e7c289f62ddee94e0149f6c81549de;p=fio.git Merge branch 'wip-cxx' of https://github.com/tchaikov/fio * 'wip-cxx' of https://github.com/tchaikov/fio: arch,lib/seqlock: implement seqlock with C++ atomic if compiled with C++ --- diff --git a/arch/arch.h b/arch/arch.h index a25779d4..fca003be 100644 --- a/arch/arch.h +++ b/arch/arch.h @@ -1,7 +1,11 @@ #ifndef ARCH_H #define ARCH_H +#ifdef __cplusplus +#include +#else #include +#endif #include "../lib/types.h" @@ -36,6 +40,21 @@ 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) \ @@ -49,6 +68,7 @@ extern unsigned long arch_flags; #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__) diff --git a/lib/seqlock.h b/lib/seqlock.h index 56f3e37d..ef3aa091 100644 --- a/lib/seqlock.h +++ b/lib/seqlock.h @@ -5,7 +5,11 @@ #include "../arch/arch.h" struct seqlock { +#ifdef __cplusplus + std::atomic sequence; +#else volatile unsigned int sequence; +#endif }; static inline void seqlock_init(struct seqlock *s)