X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu%2Fuatomic%2Fx86.h;h=a139228346cb64b5eed2425f0d71f8f78f58e9dc;hp=99b0e6c6b405191538ff6ab50de35320c47652ea;hb=424d4ed5e7b0ca5e05c3078f15abf473c6879521;hpb=2812a2d2cfdfeea621768de1a0216bc1549a4902 diff --git a/urcu/uatomic/x86.h b/urcu/uatomic/x86.h index 99b0e6c..a139228 100644 --- a/urcu/uatomic/x86.h +++ b/urcu/uatomic/x86.h @@ -39,7 +39,7 @@ struct __uatomic_dummy { }; #define __hp(x) ((struct __uatomic_dummy *)(x)) -#define _uatomic_set(addr, v) CMM_STORE_SHARED(*(addr), (v)) +#define _uatomic_set(addr, v) ((void) CMM_STORE_SHARED(*(addr), (v))) /* cmpxchg */ @@ -95,8 +95,10 @@ unsigned long __uatomic_cmpxchg(void *addr, unsigned long old, } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return 0; } @@ -157,8 +159,10 @@ unsigned long __uatomic_exchange(void *addr, unsigned long val, int len) } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return 0; } @@ -222,8 +226,10 @@ unsigned long __uatomic_add_return(void *addr, unsigned long val, } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return 0; } @@ -278,8 +284,10 @@ void __uatomic_and(void *addr, unsigned long val, int len) } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return; } @@ -332,8 +340,10 @@ void __uatomic_or(void *addr, unsigned long val, int len) } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return; } @@ -386,8 +396,10 @@ void __uatomic_add(void *addr, unsigned long val, int len) } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return; } @@ -494,8 +506,10 @@ void __uatomic_dec(void *addr, int len) } #endif } - /* generate an illegal instruction. Cannot catch this with linker tricks - * when optimizations are disabled. */ + /* + * generate an illegal instruction. Cannot catch this with + * linker tricks when optimizations are disabled. + */ __asm__ __volatile__("ud2"); return; } @@ -515,12 +529,16 @@ extern int __rcu_cas_init(void); : (compat_uatomic_##insn)) \ : (compat_uatomic_##insn)))) +/* + * We leave the return value so we don't break the ABI, but remove the + * return value from the API. + */ extern unsigned long _compat_uatomic_set(void *addr, unsigned long _new, int len); #define compat_uatomic_set(addr, _new) \ - ((__typeof__(*(addr))) _compat_uatomic_set((addr), \ - caa_cast_long_keep_sign(_new), \ - sizeof(*(addr)))) + ((void) _compat_uatomic_set((addr), \ + caa_cast_long_keep_sign(_new), \ + sizeof(*(addr)))) extern unsigned long _compat_uatomic_xchg(void *addr, @@ -579,28 +597,28 @@ extern unsigned long _compat_uatomic_add_return(void *addr, #define uatomic_and(addr, v) \ UATOMIC_COMPAT(and(addr, v)) -#define cmm_smp_mb__before_and() cmm_barrier() -#define cmm_smp_mb__after_and() cmm_barrier() +#define cmm_smp_mb__before_uatomic_and() cmm_barrier() +#define cmm_smp_mb__after_uatomic_and() cmm_barrier() #define uatomic_or(addr, v) \ UATOMIC_COMPAT(or(addr, v)) -#define cmm_smp_mb__before_or() cmm_barrier() -#define cmm_smp_mb__after_or() cmm_barrier() +#define cmm_smp_mb__before_uatomic_or() cmm_barrier() +#define cmm_smp_mb__after_uatomic_or() cmm_barrier() #define uatomic_add_return(addr, v) \ UATOMIC_COMPAT(add_return(addr, v)) #define uatomic_add(addr, v) UATOMIC_COMPAT(add(addr, v)) -#define cmm_smp_mb__before_add() cmm_barrier() -#define cmm_smp_mb__after_add() cmm_barrier() +#define cmm_smp_mb__before_uatomic_add() cmm_barrier() +#define cmm_smp_mb__after_uatomic_add() cmm_barrier() #define uatomic_inc(addr) UATOMIC_COMPAT(inc(addr)) -#define cmm_smp_mb__before_inc() cmm_barrier() -#define cmm_smp_mb__after_inc() cmm_barrier() +#define cmm_smp_mb__before_uatomic_inc() cmm_barrier() +#define cmm_smp_mb__after_uatomic_inc() cmm_barrier() #define uatomic_dec(addr) UATOMIC_COMPAT(dec(addr)) -#define cmm_smp_mb__before_dec() cmm_barrier() -#define cmm_smp_mb__after_dec() cmm_barrier() +#define cmm_smp_mb__before_uatomic_dec() cmm_barrier() +#define cmm_smp_mb__after_uatomic_dec() cmm_barrier() #ifdef __cplusplus }