> Next step is to deprecate the rte_atomicNN_*() family. Rather than > maintaining both the inline asm and intrinsic fallbacks, drop the > asm paths and use intrinsics everywhere. > > Signed-off-by: Stephen Hemminger <[email protected]> > --- > lib/eal/arm/include/rte_atomic_32.h | 4 - > lib/eal/arm/include/rte_atomic_64.h | 4 - > lib/eal/include/generic/rte_atomic.h | 76 +--------- > lib/eal/loongarch/include/rte_atomic.h | 4 - > lib/eal/ppc/include/rte_atomic.h | 173 ----------------------- > lib/eal/riscv/include/rte_atomic.h | 4 - > lib/eal/x86/include/rte_atomic.h | 172 ---------------------- > lib/eal/x86/include/rte_atomic_32.h | 188 ------------------------- > lib/eal/x86/include/rte_atomic_64.h | 157 --------------------- > 9 files changed, 6 insertions(+), 776 deletions(-) > > diff --git a/lib/eal/arm/include/rte_atomic_32.h > b/lib/eal/arm/include/rte_atomic_32.h > index 0b9a0dfa30..696a539fef 100644 > --- a/lib/eal/arm/include/rte_atomic_32.h > +++ b/lib/eal/arm/include/rte_atomic_32.h > @@ -5,10 +5,6 @@ > #ifndef _RTE_ATOMIC_ARM32_H_ > #define _RTE_ATOMIC_ARM32_H_ > > -#ifndef RTE_FORCE_INTRINSICS > -# error Platform must be built with RTE_FORCE_INTRINSICS > -#endif > - > #include "generic/rte_atomic.h" > > #ifdef __cplusplus > diff --git a/lib/eal/arm/include/rte_atomic_64.h > b/lib/eal/arm/include/rte_atomic_64.h > index 181bb60929..9f790238df 100644 > --- a/lib/eal/arm/include/rte_atomic_64.h > +++ b/lib/eal/arm/include/rte_atomic_64.h > @@ -6,10 +6,6 @@ > #ifndef _RTE_ATOMIC_ARM64_H_ > #define _RTE_ATOMIC_ARM64_H_ > > -#ifndef RTE_FORCE_INTRINSICS > -# error Platform must be built with RTE_FORCE_INTRINSICS > -#endif > - > #include "generic/rte_atomic.h" > #include <rte_branch_prediction.h> > #include <rte_debug.h> > diff --git a/lib/eal/include/generic/rte_atomic.h > b/lib/eal/include/generic/rte_atomic.h > index 0a4f3f8528..292e52fade 100644 > --- a/lib/eal/include/generic/rte_atomic.h > +++ b/lib/eal/include/generic/rte_atomic.h > @@ -187,13 +187,11 @@ static inline void > rte_atomic_thread_fence(rte_memory_order memorder); > static inline int > rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int > rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src) > { > return __sync_bool_compare_and_swap(dst, exp, src); > } > -#endif > > /** > * Atomic exchange. > @@ -211,15 +209,11 @@ rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t > exp, uint16_t src) > * The original value at that location > */ > static inline uint16_t > -rte_atomic16_exchange(volatile uint16_t *dst, uint16_t val); > - > -#ifdef RTE_FORCE_INTRINSICS > -static inline uint16_t > rte_atomic16_exchange(volatile uint16_t *dst, uint16_t val) > { > - return rte_atomic_exchange_explicit(dst, val, > rte_memory_order_seq_cst); > + return rte_atomic_exchange_explicit((volatile __rte_atomic uint16_t > *)dst, > + val, rte_memory_order_seq_cst); > } > -#endif > > /** > * The atomic counter structure. > @@ -312,13 +306,11 @@ rte_atomic16_sub(rte_atomic16_t *v, int16_t dec) > static inline void > rte_atomic16_inc(rte_atomic16_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic16_inc(rte_atomic16_t *v) > { > rte_atomic16_add(v, 1); > } > -#endif > > /** > * Atomically decrement a counter by one. > @@ -329,13 +321,11 @@ rte_atomic16_inc(rte_atomic16_t *v) > static inline void > rte_atomic16_dec(rte_atomic16_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic16_dec(rte_atomic16_t *v) > { > rte_atomic16_sub(v, 1); > } > -#endif > > /** > * Atomically add a 16-bit value to a counter and return the result. > @@ -391,13 +381,11 @@ rte_atomic16_sub_return(rte_atomic16_t *v, int16_t > dec) > */ > static inline int rte_atomic16_inc_and_test(rte_atomic16_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic16_inc_and_test(rte_atomic16_t *v) > { > return rte_atomic_fetch_add_explicit((volatile __rte_atomic int16_t > *)&v- > >cnt, 1, > rte_memory_order_seq_cst) + 1 == 0; > } > -#endif > > /** > * Atomically decrement a 16-bit counter by one and test. > @@ -412,13 +400,11 @@ static inline int > rte_atomic16_inc_and_test(rte_atomic16_t *v) > */ > static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v) > { > return rte_atomic_fetch_sub_explicit((volatile __rte_atomic int16_t > *)&v- > >cnt, 1, > rte_memory_order_seq_cst) - 1 == 0; > } > -#endif > > /** > * Atomically test and set a 16-bit atomic counter. > @@ -433,12 +419,10 @@ static inline int > rte_atomic16_dec_and_test(rte_atomic16_t *v) > */ > static inline int rte_atomic16_test_and_set(rte_atomic16_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic16_test_and_set(rte_atomic16_t *v) > { > return rte_atomic16_cmpset((volatile uint16_t *)&v->cnt, 0, 1); > } > -#endif > > /** > * Atomically set a 16-bit counter to 0. > @@ -472,13 +456,11 @@ static inline void rte_atomic16_clear(rte_atomic16_t > *v) > static inline int > rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int > rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src) > { > return __sync_bool_compare_and_swap(dst, exp, src); > } > -#endif > > /** > * Atomic exchange. > @@ -496,15 +478,11 @@ rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t > exp, uint32_t src) > * The original value at that location > */ > static inline uint32_t > -rte_atomic32_exchange(volatile uint32_t *dst, uint32_t val); > - > -#ifdef RTE_FORCE_INTRINSICS > -static inline uint32_t > rte_atomic32_exchange(volatile uint32_t *dst, uint32_t val) > { > - return rte_atomic_exchange_explicit(dst, val, > rte_memory_order_seq_cst); > + return rte_atomic_exchange_explicit((volatile __rte_atomic uint32_t > *)dst, > + val, rte_memory_order_seq_cst); > } > -#endif > > /** > * The atomic counter structure. > @@ -597,13 +575,11 @@ rte_atomic32_sub(rte_atomic32_t *v, int32_t dec) > static inline void > rte_atomic32_inc(rte_atomic32_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic32_inc(rte_atomic32_t *v) > { > rte_atomic32_add(v, 1); > } > -#endif > > /** > * Atomically decrement a counter by one. > @@ -614,13 +590,11 @@ rte_atomic32_inc(rte_atomic32_t *v) > static inline void > rte_atomic32_dec(rte_atomic32_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic32_dec(rte_atomic32_t *v) > { > rte_atomic32_sub(v,1); > } > -#endif > > /** > * Atomically add a 32-bit value to a counter and return the result. > @@ -676,13 +650,11 @@ rte_atomic32_sub_return(rte_atomic32_t *v, int32_t > dec) > */ > static inline int rte_atomic32_inc_and_test(rte_atomic32_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic32_inc_and_test(rte_atomic32_t *v) > { > return rte_atomic_fetch_add_explicit((volatile __rte_atomic int32_t > *)&v- > >cnt, 1, > rte_memory_order_seq_cst) + 1 == 0; > } > -#endif > > /** > * Atomically decrement a 32-bit counter by one and test. > @@ -697,13 +669,11 @@ static inline int > rte_atomic32_inc_and_test(rte_atomic32_t *v) > */ > static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) > { > return rte_atomic_fetch_sub_explicit((volatile __rte_atomic int32_t > *)&v- > >cnt, 1, > rte_memory_order_seq_cst) - 1 == 0; > } > -#endif > > /** > * Atomically test and set a 32-bit atomic counter. > @@ -718,12 +688,10 @@ static inline int > rte_atomic32_dec_and_test(rte_atomic32_t *v) > */ > static inline int rte_atomic32_test_and_set(rte_atomic32_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic32_test_and_set(rte_atomic32_t *v) > { > return rte_atomic32_cmpset((volatile uint32_t *)&v->cnt, 0, 1); > } > -#endif > > /** > * Atomically set a 32-bit counter to 0. > @@ -756,13 +724,11 @@ static inline void rte_atomic32_clear(rte_atomic32_t > *v) > static inline int > rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int > rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src) > { > return __sync_bool_compare_and_swap(dst, exp, src); > } > -#endif > > /** > * Atomic exchange. > @@ -780,15 +746,11 @@ rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t > exp, uint64_t src) > * The original value at that location > */ > static inline uint64_t > -rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val); > - > -#ifdef RTE_FORCE_INTRINSICS > -static inline uint64_t > rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val) > { > - return rte_atomic_exchange_explicit(dst, val, > rte_memory_order_seq_cst); > + return rte_atomic_exchange_explicit((volatile __rte_atomic uint64_t > *)dst, > + val, rte_memory_order_seq_cst); > } > -#endif > > /** > * The atomic counter structure. > @@ -811,7 +773,6 @@ typedef struct { > static inline void > rte_atomic64_init(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_init(rte_atomic64_t *v) > { > @@ -828,7 +789,6 @@ rte_atomic64_init(rte_atomic64_t *v) > } > #endif > } > -#endif > > /** > * Atomically read a 64-bit counter. > @@ -841,7 +801,6 @@ rte_atomic64_init(rte_atomic64_t *v) > static inline int64_t > rte_atomic64_read(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int64_t > rte_atomic64_read(rte_atomic64_t *v) > { > @@ -860,7 +819,6 @@ rte_atomic64_read(rte_atomic64_t *v) > return tmp; > #endif > } > -#endif > > /** > * Atomically set a 64-bit counter. > @@ -873,7 +831,6 @@ rte_atomic64_read(rte_atomic64_t *v) > static inline void > rte_atomic64_set(rte_atomic64_t *v, int64_t new_value); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_set(rte_atomic64_t *v, int64_t new_value) > { > @@ -890,7 +847,6 @@ rte_atomic64_set(rte_atomic64_t *v, int64_t new_value) > } > #endif > } > -#endif > > /** > * Atomically add a 64-bit value to a counter. > @@ -903,14 +859,12 @@ rte_atomic64_set(rte_atomic64_t *v, int64_t > new_value) > static inline void > rte_atomic64_add(rte_atomic64_t *v, int64_t inc); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_add(rte_atomic64_t *v, int64_t inc) > { > rte_atomic_fetch_add_explicit((volatile __rte_atomic int64_t *)&v->cnt, > inc, > rte_memory_order_seq_cst); > } > -#endif > > /** > * Atomically subtract a 64-bit value from a counter. > @@ -923,14 +877,12 @@ rte_atomic64_add(rte_atomic64_t *v, int64_t inc) > static inline void > rte_atomic64_sub(rte_atomic64_t *v, int64_t dec); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_sub(rte_atomic64_t *v, int64_t dec) > { > rte_atomic_fetch_sub_explicit((volatile __rte_atomic int64_t *)&v->cnt, > dec, > rte_memory_order_seq_cst); > } > -#endif > > /** > * Atomically increment a 64-bit counter by one and test. > @@ -941,13 +893,11 @@ rte_atomic64_sub(rte_atomic64_t *v, int64_t dec) > static inline void > rte_atomic64_inc(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_inc(rte_atomic64_t *v) > { > rte_atomic64_add(v, 1); > } > -#endif > > /** > * Atomically decrement a 64-bit counter by one and test. > @@ -958,13 +908,11 @@ rte_atomic64_inc(rte_atomic64_t *v) > static inline void > rte_atomic64_dec(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void > rte_atomic64_dec(rte_atomic64_t *v) > { > rte_atomic64_sub(v, 1); > } > -#endif > > /** > * Add a 64-bit value to an atomic counter and return the result. > @@ -982,14 +930,12 @@ rte_atomic64_dec(rte_atomic64_t *v) > static inline int64_t > rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int64_t > rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc) > { > return rte_atomic_fetch_add_explicit((volatile __rte_atomic int64_t > *)&v- > >cnt, inc, > rte_memory_order_seq_cst) + inc; > } > -#endif > > /** > * Subtract a 64-bit value from an atomic counter and return the result. > @@ -1007,14 +953,12 @@ rte_atomic64_add_return(rte_atomic64_t *v, int64_t > inc) > static inline int64_t > rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int64_t > rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec) > { > return rte_atomic_fetch_sub_explicit((volatile __rte_atomic int64_t > *)&v- > >cnt, dec, > rte_memory_order_seq_cst) - dec; > } > -#endif > > /** > * Atomically increment a 64-bit counter by one and test. > @@ -1029,12 +973,10 @@ rte_atomic64_sub_return(rte_atomic64_t *v, int64_t > dec) > */ > static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v) > { > return rte_atomic64_add_return(v, 1) == 0; > } > -#endif > > /** > * Atomically decrement a 64-bit counter by one and test. > @@ -1049,12 +991,10 @@ static inline int > rte_atomic64_inc_and_test(rte_atomic64_t *v) > */ > static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v) > { > return rte_atomic64_sub_return(v, 1) == 0; > } > -#endif > > /** > * Atomically test and set a 64-bit atomic counter. > @@ -1069,12 +1009,10 @@ static inline int > rte_atomic64_dec_and_test(rte_atomic64_t *v) > */ > static inline int rte_atomic64_test_and_set(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline int rte_atomic64_test_and_set(rte_atomic64_t *v) > { > return rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, 0, 1); > } > -#endif > > /** > * Atomically set a 64-bit counter to 0. > @@ -1084,12 +1022,10 @@ static inline int > rte_atomic64_test_and_set(rte_atomic64_t *v) > */ > static inline void rte_atomic64_clear(rte_atomic64_t *v); > > -#ifdef RTE_FORCE_INTRINSICS > static inline void rte_atomic64_clear(rte_atomic64_t *v) > { > rte_atomic64_set(v, 0); > } > -#endif > > #endif > > diff --git a/lib/eal/loongarch/include/rte_atomic.h > b/lib/eal/loongarch/include/rte_atomic.h > index c8066a4612..785a452c9e 100644 > --- a/lib/eal/loongarch/include/rte_atomic.h > +++ b/lib/eal/loongarch/include/rte_atomic.h > @@ -5,10 +5,6 @@ > #ifndef RTE_ATOMIC_LOONGARCH_H > #define RTE_ATOMIC_LOONGARCH_H > > -#ifndef RTE_FORCE_INTRINSICS > -# error Platform must be built with RTE_FORCE_INTRINSICS > -#endif > - > #include <rte_common.h> > #include "generic/rte_atomic.h" > > diff --git a/lib/eal/ppc/include/rte_atomic.h > b/lib/eal/ppc/include/rte_atomic.h > index 10acc238f9..64f4c3d670 100644 > --- a/lib/eal/ppc/include/rte_atomic.h > +++ b/lib/eal/ppc/include/rte_atomic.h > @@ -43,179 +43,6 @@ rte_atomic_thread_fence(rte_memory_order memorder) > } > > /*------------------------- 16 bit atomic operations > -------------------------*/ > -#ifndef RTE_FORCE_INTRINSICS > -static inline int > -rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src) > -{ > - return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, > rte_memory_order_acquire, > - rte_memory_order_acquire) ? 1 : 0; > -} > - > -static inline int rte_atomic16_test_and_set(rte_atomic16_t *v) > -{ > - return rte_atomic16_cmpset((volatile uint16_t *)&v->cnt, 0, 1); > -} > - > -static inline void > -rte_atomic16_inc(rte_atomic16_t *v) > -{ > - rte_atomic_fetch_add_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline void > -rte_atomic16_dec(rte_atomic16_t *v) > -{ > - rte_atomic_fetch_sub_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline int rte_atomic16_inc_and_test(rte_atomic16_t *v) > -{ > - return rte_atomic_fetch_add_explicit(&v->cnt, 1, > rte_memory_order_acquire) + 1 == 0; > -} > - > -static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v) > -{ > - return rte_atomic_fetch_sub_explicit(&v->cnt, 1, > rte_memory_order_acquire) - 1 == 0; > -} > - > -static inline uint16_t > -rte_atomic16_exchange(volatile uint16_t *dst, uint16_t val) > -{ > - return __atomic_exchange_2(dst, val, rte_memory_order_seq_cst); > -} > - > -/*------------------------- 32 bit atomic operations > -------------------------*/ > - > -static inline int > -rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src) > -{ > - return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, > rte_memory_order_acquire, > - rte_memory_order_acquire) ? 1 : 0; > -} > - > -static inline int rte_atomic32_test_and_set(rte_atomic32_t *v) > -{ > - return rte_atomic32_cmpset((volatile uint32_t *)&v->cnt, 0, 1); > -} > - > -static inline void > -rte_atomic32_inc(rte_atomic32_t *v) > -{ > - rte_atomic_fetch_add_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline void > -rte_atomic32_dec(rte_atomic32_t *v) > -{ > - rte_atomic_fetch_sub_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline int rte_atomic32_inc_and_test(rte_atomic32_t *v) > -{ > - return rte_atomic_fetch_add_explicit(&v->cnt, 1, > rte_memory_order_acquire) + 1 == 0; > -} > - > -static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) > -{ > - return rte_atomic_fetch_sub_explicit(&v->cnt, 1, > rte_memory_order_acquire) - 1 == 0; > -} > - > -static inline uint32_t > -rte_atomic32_exchange(volatile uint32_t *dst, uint32_t val) > -{ > - return __atomic_exchange_4(dst, val, rte_memory_order_seq_cst); > -} > - > -/*------------------------- 64 bit atomic operations > -------------------------*/ > - > -static inline int > -rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src) > -{ > - return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, > rte_memory_order_acquire, > - rte_memory_order_acquire) ? 1 : 0; > -} > - > -static inline void > -rte_atomic64_init(rte_atomic64_t *v) > -{ > - v->cnt = 0; > -} > - > -static inline int64_t > -rte_atomic64_read(rte_atomic64_t *v) > -{ > - return v->cnt; > -} > - > -static inline void > -rte_atomic64_set(rte_atomic64_t *v, int64_t new_value) > -{ > - v->cnt = new_value; > -} > - > -static inline void > -rte_atomic64_add(rte_atomic64_t *v, int64_t inc) > -{ > - rte_atomic_fetch_add_explicit(&v->cnt, inc, rte_memory_order_acquire); > -} > - > -static inline void > -rte_atomic64_sub(rte_atomic64_t *v, int64_t dec) > -{ > - rte_atomic_fetch_sub_explicit(&v->cnt, dec, > rte_memory_order_acquire); > -} > - > -static inline void > -rte_atomic64_inc(rte_atomic64_t *v) > -{ > - rte_atomic_fetch_add_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline void > -rte_atomic64_dec(rte_atomic64_t *v) > -{ > - rte_atomic_fetch_sub_explicit(&v->cnt, 1, rte_memory_order_acquire); > -} > - > -static inline int64_t > -rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc) > -{ > - return rte_atomic_fetch_add_explicit(&v->cnt, inc, > rte_memory_order_acquire) + inc; > -} > - > -static inline int64_t > -rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec) > -{ > - return rte_atomic_fetch_sub_explicit(&v->cnt, dec, > rte_memory_order_acquire) - dec; > -} > - > -static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v) > -{ > - return rte_atomic_fetch_add_explicit(&v->cnt, 1, > rte_memory_order_acquire) + 1 == 0; > -} > - > -static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v) > -{ > - return rte_atomic_fetch_sub_explicit(&v->cnt, 1, > rte_memory_order_acquire) - 1 == 0; > -} > - > -static inline int rte_atomic64_test_and_set(rte_atomic64_t *v) > -{ > - return rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, 0, 1); > -} > - > -static inline void rte_atomic64_clear(rte_atomic64_t *v) > -{ > - v->cnt = 0; > -} > - > -static inline uint64_t > -rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val) > -{ > - return __atomic_exchange_8(dst, val, rte_memory_order_seq_cst); > -} > - > -#endif > > #ifdef __cplusplus > } > diff --git a/lib/eal/riscv/include/rte_atomic.h > b/lib/eal/riscv/include/rte_atomic.h > index 66346ad474..061b175f33 100644 > --- a/lib/eal/riscv/include/rte_atomic.h > +++ b/lib/eal/riscv/include/rte_atomic.h > @@ -8,10 +8,6 @@ > #ifndef RTE_ATOMIC_RISCV_H > #define RTE_ATOMIC_RISCV_H > > -#ifndef RTE_FORCE_INTRINSICS > -# error Platform must be built with RTE_FORCE_INTRINSICS > -#endif > - > #include <stdint.h> > #include <rte_common.h> > #include <rte_config.h> > diff --git a/lib/eal/x86/include/rte_atomic.h > b/lib/eal/x86/include/rte_atomic.h > index e071e4234e..4f05302c9f 100644 > --- a/lib/eal/x86/include/rte_atomic.h > +++ b/lib/eal/x86/include/rte_atomic.h > @@ -111,178 +111,6 @@ rte_atomic_thread_fence(rte_memory_order > memorder) > extern "C" { > #endif > > -#ifndef RTE_FORCE_INTRINSICS > -static inline int > -rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src) > -{ > - uint8_t res; > - > - asm volatile( > - MPLOCKED > - "cmpxchgw %[src], %[dst];" > - "sete %[res];" > - : [res] "=a" (res), /* output */ > - [dst] "=m" (*dst) > - : [src] "r" (src), /* input */ > - "a" (exp), > - "m" (*dst) > - : "memory"); /* no-clobber list */ > - return res; > -} > - > -static inline uint16_t > -rte_atomic16_exchange(volatile uint16_t *dst, uint16_t val) > -{ > - asm volatile( > - MPLOCKED > - "xchgw %0, %1;" > - : "=r" (val), "=m" (*dst) > - : "0" (val), "m" (*dst) > - : "memory"); /* no-clobber list */ > - return val; > -} > - > -static inline int rte_atomic16_test_and_set(rte_atomic16_t *v) > -{ > - return rte_atomic16_cmpset((volatile uint16_t *)&v->cnt, 0, 1); > -} > - > -static inline void > -rte_atomic16_inc(rte_atomic16_t *v) > -{ > - asm volatile( > - MPLOCKED > - "incw %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline void > -rte_atomic16_dec(rte_atomic16_t *v) > -{ > - asm volatile( > - MPLOCKED > - "decw %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline int rte_atomic16_inc_and_test(rte_atomic16_t *v) > -{ > - uint8_t ret; > - > - asm volatile( > - MPLOCKED > - "incw %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - return ret != 0; > -} > - > -static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v) > -{ > - uint8_t ret; > - > - asm volatile(MPLOCKED > - "decw %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - return ret != 0; > -} > - > -/*------------------------- 32 bit atomic operations > -------------------------*/ > - > -static inline int > -rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src) > -{ > - uint8_t res; > - > - asm volatile( > - MPLOCKED > - "cmpxchgl %[src], %[dst];" > - "sete %[res];" > - : [res] "=a" (res), /* output */ > - [dst] "=m" (*dst) > - : [src] "r" (src), /* input */ > - "a" (exp), > - "m" (*dst) > - : "memory"); /* no-clobber list */ > - return res; > -} > - > -static inline uint32_t > -rte_atomic32_exchange(volatile uint32_t *dst, uint32_t val) > -{ > - asm volatile( > - MPLOCKED > - "xchgl %0, %1;" > - : "=r" (val), "=m" (*dst) > - : "0" (val), "m" (*dst) > - : "memory"); /* no-clobber list */ > - return val; > -} > - > -static inline int rte_atomic32_test_and_set(rte_atomic32_t *v) > -{ > - return rte_atomic32_cmpset((volatile uint32_t *)&v->cnt, 0, 1); > -} > - > -static inline void > -rte_atomic32_inc(rte_atomic32_t *v) > -{ > - asm volatile( > - MPLOCKED > - "incl %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline void > -rte_atomic32_dec(rte_atomic32_t *v) > -{ > - asm volatile( > - MPLOCKED > - "decl %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline int rte_atomic32_inc_and_test(rte_atomic32_t *v) > -{ > - uint8_t ret; > - > - asm volatile( > - MPLOCKED > - "incl %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - return ret != 0; > -} > - > -static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) > -{ > - uint8_t ret; > - > - asm volatile(MPLOCKED > - "decl %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - return ret != 0; > -} > - > -#endif /* !RTE_FORCE_INTRINSICS */ > > #ifdef __cplusplus > } > diff --git a/lib/eal/x86/include/rte_atomic_32.h > b/lib/eal/x86/include/rte_atomic_32.h > index 0f25863aa5..37d139f30d 100644 > --- a/lib/eal/x86/include/rte_atomic_32.h > +++ b/lib/eal/x86/include/rte_atomic_32.h > @@ -20,193 +20,5 @@ > > /*------------------------- 64 bit atomic operations > -------------------------*/ > > -#ifndef RTE_FORCE_INTRINSICS > -static inline int > -rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src) > -{ > - uint8_t res; > - union { > - struct { > - uint32_t l32; > - uint32_t h32; > - }; > - uint64_t u64; > - } _exp, _src; > - > - _exp.u64 = exp; > - _src.u64 = src; > - > -#ifndef __PIC__ > - asm volatile ( > - MPLOCKED > - "cmpxchg8b (%[dst]);" > - "setz %[res];" > - : [res] "=a" (res) /* result in eax */ > - : [dst] "S" (dst), /* esi */ > - "b" (_src.l32), /* ebx */ > - "c" (_src.h32), /* ecx */ > - "a" (_exp.l32), /* eax */ > - "d" (_exp.h32) /* edx */ > - : "memory" ); /* no-clobber list */ > -#else > - asm volatile ( > - "xchgl %%ebx, %%edi;\n" > - MPLOCKED > - "cmpxchg8b (%[dst]);" > - "setz %[res];" > - "xchgl %%ebx, %%edi;\n" > - : [res] "=a" (res) /* result in eax */ > - : [dst] "S" (dst), /* esi */ > - "D" (_src.l32), /* ebx */ > - "c" (_src.h32), /* ecx */ > - "a" (_exp.l32), /* eax */ > - "d" (_exp.h32) /* edx */ > - : "memory" ); /* no-clobber list */ > -#endif > - > - return res; > -} > - > -static inline uint64_t > -rte_atomic64_exchange(volatile uint64_t *dest, uint64_t val) > -{ > - uint64_t old; > - > - do { > - old = *dest; > - } while (rte_atomic64_cmpset(dest, old, val) == 0); > - > - return old; > -} > - > -static inline void > -rte_atomic64_init(rte_atomic64_t *v) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, 0); > - } > -} > - > -static inline int64_t > -rte_atomic64_read(rte_atomic64_t *v) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - /* replace the value by itself */ > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, tmp); > - } > - return tmp; > -} > - > -static inline void > -rte_atomic64_set(rte_atomic64_t *v, int64_t new_value) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, new_value); > - } > -} > - > -static inline void > -rte_atomic64_add(rte_atomic64_t *v, int64_t inc) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, tmp + inc); > - } > -} > - > -static inline void > -rte_atomic64_sub(rte_atomic64_t *v, int64_t dec) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, tmp - dec); > - } > -} > - > -static inline void > -rte_atomic64_inc(rte_atomic64_t *v) > -{ > - rte_atomic64_add(v, 1); > -} > - > -static inline void > -rte_atomic64_dec(rte_atomic64_t *v) > -{ > - rte_atomic64_sub(v, 1); > -} > - > -static inline int64_t > -rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, tmp + inc); > - } > - > - return tmp + inc; > -} > - > -static inline int64_t > -rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec) > -{ > - int success = 0; > - uint64_t tmp; > - > - while (success == 0) { > - tmp = v->cnt; > - success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, > - tmp, tmp - dec); > - } > - > - return tmp - dec; > -} > - > -static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v) > -{ > - return rte_atomic64_add_return(v, 1) == 0; > -} > - > -static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v) > -{ > - return rte_atomic64_sub_return(v, 1) == 0; > -} > - > -static inline int rte_atomic64_test_and_set(rte_atomic64_t *v) > -{ > - return rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, 0, 1); > -} > - > -static inline void rte_atomic64_clear(rte_atomic64_t *v) > -{ > - rte_atomic64_set(v, 0); > -} > -#endif > > #endif /* _RTE_ATOMIC_I686_H_ */ > diff --git a/lib/eal/x86/include/rte_atomic_64.h > b/lib/eal/x86/include/rte_atomic_64.h > index 0a7a2131e0..1cd12695a2 100644 > --- a/lib/eal/x86/include/rte_atomic_64.h > +++ b/lib/eal/x86/include/rte_atomic_64.h > @@ -22,163 +22,6 @@ > > /*------------------------- 64 bit atomic operations > -------------------------*/ > > -#ifndef RTE_FORCE_INTRINSICS > -static inline int > -rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src) > -{ > - uint8_t res; > - > - > - asm volatile( > - MPLOCKED > - "cmpxchgq %[src], %[dst];" > - "sete %[res];" > - : [res] "=a" (res), /* output */ > - [dst] "=m" (*dst) > - : [src] "r" (src), /* input */ > - "a" (exp), > - "m" (*dst) > - : "memory"); /* no-clobber list */ > - > - return res; > -} > - > -static inline uint64_t > -rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val) > -{ > - asm volatile( > - MPLOCKED > - "xchgq %0, %1;" > - : "=r" (val), "=m" (*dst) > - : "0" (val), "m" (*dst) > - : "memory"); /* no-clobber list */ > - return val; > -} > - > -static inline void > -rte_atomic64_init(rte_atomic64_t *v) > -{ > - v->cnt = 0; > -} > - > -static inline int64_t > -rte_atomic64_read(rte_atomic64_t *v) > -{ > - return v->cnt; > -} > - > -static inline void > -rte_atomic64_set(rte_atomic64_t *v, int64_t new_value) > -{ > - v->cnt = new_value; > -} > - > -static inline void > -rte_atomic64_add(rte_atomic64_t *v, int64_t inc) > -{ > - asm volatile( > - MPLOCKED > - "addq %[inc], %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : [inc] "ir" (inc), /* input */ > - "m" (v->cnt) > - ); > -} > - > -static inline void > -rte_atomic64_sub(rte_atomic64_t *v, int64_t dec) > -{ > - asm volatile( > - MPLOCKED > - "subq %[dec], %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : [dec] "ir" (dec), /* input */ > - "m" (v->cnt) > - ); > -} > - > -static inline void > -rte_atomic64_inc(rte_atomic64_t *v) > -{ > - asm volatile( > - MPLOCKED > - "incq %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline void > -rte_atomic64_dec(rte_atomic64_t *v) > -{ > - asm volatile( > - MPLOCKED > - "decq %[cnt]" > - : [cnt] "=m" (v->cnt) /* output */ > - : "m" (v->cnt) /* input */ > - ); > -} > - > -static inline int64_t > -rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc) > -{ > - int64_t prev = inc; > - > - asm volatile( > - MPLOCKED > - "xaddq %[prev], %[cnt]" > - : [prev] "+r" (prev), /* output */ > - [cnt] "=m" (v->cnt) > - : "m" (v->cnt) /* input */ > - ); > - return prev + inc; > -} > - > -static inline int64_t > -rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec) > -{ > - return rte_atomic64_add_return(v, -dec); > -} > - > -static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v) > -{ > - uint8_t ret; > - > - asm volatile( > - MPLOCKED > - "incq %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - > - return ret != 0; > -} > - > -static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v) > -{ > - uint8_t ret; > - > - asm volatile( > - MPLOCKED > - "decq %[cnt] ; " > - "sete %[ret]" > - : [cnt] "+m" (v->cnt), /* output */ > - [ret] "=qm" (ret) > - ); > - return ret != 0; > -} > - > -static inline int rte_atomic64_test_and_set(rte_atomic64_t *v) > -{ > - return rte_atomic64_cmpset((volatile uint64_t *)&v->cnt, 0, 1); > -} > - > -static inline void rte_atomic64_clear(rte_atomic64_t *v) > -{ > - v->cnt = 0; > -} > -#endif > > /*------------------------ 128 bit atomic operations > -------------------------*/ > > --
Acked-by: Konstantin Ananyev <[email protected]> > 2.53.0

