From 2d6b8423ece7f00798d73ede08719d4da6abbd46 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sat, 27 Jun 2020 08:40:23 -0700 Subject: [PATCH liburing 1/2] Make the liburing header files again compatible with C++ This patch has been tested by inspecting the output of the following command: g++ -I src/include -c -Wall -Wextra src/*.c Fixes: b9c0bf79aa87 ("src/include/liburing/barrier.h: Use C11 atomics") # . Signed-off-by: Bart Van Assche --- src/include/liburing.h | 8 ++++---- src/include/liburing/barrier.h | 37 ++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/include/liburing.h b/src/include/liburing.h index c9034fc0df1b..76e2b854f957 100644 --- a/src/include/liburing.h +++ b/src/include/liburing.h @@ -2,10 +2,6 @@ #ifndef LIB_URING_H #define LIB_URING_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -19,6 +15,10 @@ extern "C" { #include "liburing/io_uring.h" #include "liburing/barrier.h" +#ifdef __cplusplus +extern "C" { +#endif + /* * Library interface to io_uring */ diff --git a/src/include/liburing/barrier.h b/src/include/liburing/barrier.h index c8aa4210371c..5ad337f33262 100644 --- a/src/include/liburing/barrier.h +++ b/src/include/liburing/barrier.h @@ -2,8 +2,6 @@ #ifndef LIBURING_BARRIER_H #define LIBURING_BARRIER_H -#include - /* From the kernel documentation file refcount-vs-atomic.rst: @@ -23,6 +21,40 @@ after the acquire operation executes. This is implemented using :c:func:`smp_acquire__after_ctrl_dep`. */ +#ifdef __cplusplus +#include + +template +static inline void IO_URING_WRITE_ONCE(T &var, T val) +{ + std::atomic_store_explicit(reinterpret_cast *>(&var), + val, std::memory_order_relaxed); +} +template +static inline T IO_URING_READ_ONCE(const T &var) +{ + return std::atomic_load_explicit( + reinterpret_cast *>(&var), + std::memory_order_relaxed); +} + +template +static inline void io_uring_smp_store_release(T *p, T v) +{ + std::atomic_store_explicit(reinterpret_cast *>(p), v, + std::memory_order_release); +} + +template +static inline T io_uring_smp_load_acquire(const T *p) +{ + return std::atomic_load_explicit( + reinterpret_cast *>(p), + std::memory_order_acquire); +} +#else +#include + #define IO_URING_WRITE_ONCE(var, val) \ atomic_store_explicit(&(var), (val), memory_order_relaxed) #define IO_URING_READ_ONCE(var) \ @@ -32,5 +64,6 @@ after the acquire operation executes. This is implemented using atomic_store_explicit((p), (v), memory_order_release) #define io_uring_smp_load_acquire(p) \ atomic_load_explicit((p), memory_order_acquire) +#endif #endif /* defined(LIBURING_BARRIER_H) */