From 87d2d3599e1c4401d5b463189fbd7ab07e2a7f52 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Thu, 13 Jun 2013 18:40:45 +0000 Subject: [PATCH] Minor improvements to . - Define __SYNC_ATOMICS in case we're using the __sync_*() API. This is not used by itself, but may be useful for some of the intrinsics code to determine whether it should build the machine-dependent intrinsic functions. - Make is_lock_free() work in kernelspace. For now, assume atomics in kernelspace are always lock free. This is a quite reasonable assumption, as we surely shouldn't implement the atomic fallbacks for arbitrary sizes. --- sys/sys/stdatomic.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/sys/stdatomic.h b/sys/sys/stdatomic.h index 5bf636f67b0..9aceb792046 100644 --- a/sys/sys/stdatomic.h +++ b/sys/sys/stdatomic.h @@ -37,7 +37,9 @@ #define __CLANG_ATOMICS #elif __GNUC_PREREQ__(4, 7) #define __GNUC_ATOMICS -#elif !defined(__GNUC__) +#elif defined(__GNUC__) +#define __SYNC_ATOMICS +#else #error "stdatomic.h does not support your compiler" #endif @@ -156,7 +158,11 @@ enum memory_order { * 7.17.5 Lock-free property. */ -#if defined(__CLANG_ATOMICS) +#if defined(_KERNEL) +/* Atomics in kernelspace are always lock-free. */ +#define atomic_is_lock_free(obj) \ + ((void)(obj), (_Bool)1) +#elif defined(__CLANG_ATOMICS) #define atomic_is_lock_free(obj) \ __atomic_is_lock_free(sizeof(*(obj)), obj) #elif defined(__GNUC_ATOMICS)