Use __atomic_fetch_{add,and,or,sub,xor} instead of
__atomic_{add,and,or,sub,xor}_fetch adding the necessary code to
allow consumption of the resulting value.

Signed-off-by: Tyler Retzlaff <roret...@linux.microsoft.com>
---
 lib/eal/include/generic/rte_rwlock.h |  8 ++++----
 lib/eal/ppc/include/rte_atomic.h     | 16 ++++++++--------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/lib/eal/include/generic/rte_rwlock.h 
b/lib/eal/include/generic/rte_rwlock.h
index d45c22c..71e2d8d 100644
--- a/lib/eal/include/generic/rte_rwlock.h
+++ b/lib/eal/include/generic/rte_rwlock.h
@@ -97,8 +97,8 @@
                        rte_pause();
 
                /* Try to get read lock */
-               x = __atomic_add_fetch(&rwl->cnt, RTE_RWLOCK_READ,
-                                      __ATOMIC_ACQUIRE);
+               x = __atomic_fetch_add(&rwl->cnt, RTE_RWLOCK_READ,
+                                      __ATOMIC_ACQUIRE) + RTE_RWLOCK_READ;
 
                /* If no writer, then acquire was successful */
                if (likely(!(x & RTE_RWLOCK_MASK)))
@@ -134,8 +134,8 @@
                return -EBUSY;
 
        /* Try to get read lock */
-       x = __atomic_add_fetch(&rwl->cnt, RTE_RWLOCK_READ,
-                              __ATOMIC_ACQUIRE);
+       x = __atomic_fetch_add(&rwl->cnt, RTE_RWLOCK_READ,
+                              __ATOMIC_ACQUIRE) + RTE_RWLOCK_READ;
 
        /* Back out if writer raced in */
        if (unlikely(x & RTE_RWLOCK_MASK)) {
diff --git a/lib/eal/ppc/include/rte_atomic.h b/lib/eal/ppc/include/rte_atomic.h
index 663b4d3..ffabd98 100644
--- a/lib/eal/ppc/include/rte_atomic.h
+++ b/lib/eal/ppc/include/rte_atomic.h
@@ -71,12 +71,12 @@ static inline int rte_atomic16_test_and_set(rte_atomic16_t 
*v)
 
 static inline int rte_atomic16_inc_and_test(rte_atomic16_t *v)
 {
-       return __atomic_add_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_add(&v->cnt, 1, __ATOMIC_ACQUIRE) + 1 == 0;
 }
 
 static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v)
 {
-       return __atomic_sub_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_sub(&v->cnt, 1, __ATOMIC_ACQUIRE) - 1 == 0;
 }
 
 static inline uint16_t
@@ -113,12 +113,12 @@ static inline int 
rte_atomic32_test_and_set(rte_atomic32_t *v)
 
 static inline int rte_atomic32_inc_and_test(rte_atomic32_t *v)
 {
-       return __atomic_add_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_add(&v->cnt, 1, __ATOMIC_ACQUIRE) + 1 == 0;
 }
 
 static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v)
 {
-       return __atomic_sub_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_sub(&v->cnt, 1, __ATOMIC_ACQUIRE) - 1 == 0;
 }
 
 static inline uint32_t
@@ -181,23 +181,23 @@ static inline int 
rte_atomic32_dec_and_test(rte_atomic32_t *v)
 static inline int64_t
 rte_atomic64_add_return(rte_atomic64_t *v, int64_t inc)
 {
-       return __atomic_add_fetch(&v->cnt, inc, __ATOMIC_ACQUIRE);
+       return __atomic_fetch_add(&v->cnt, inc, __ATOMIC_ACQUIRE) + inc;
 }
 
 static inline int64_t
 rte_atomic64_sub_return(rte_atomic64_t *v, int64_t dec)
 {
-       return __atomic_sub_fetch(&v->cnt, dec, __ATOMIC_ACQUIRE);
+       return __atomic_fetch_sub(&v->cnt, dec, __ATOMIC_ACQUIRE) - dec;
 }
 
 static inline int rte_atomic64_inc_and_test(rte_atomic64_t *v)
 {
-       return __atomic_add_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_add(&v->cnt, 1, __ATOMIC_ACQUIRE) + 1 == 0;
 }
 
 static inline int rte_atomic64_dec_and_test(rte_atomic64_t *v)
 {
-       return __atomic_sub_fetch(&v->cnt, 1, __ATOMIC_ACQUIRE) == 0;
+       return __atomic_fetch_sub(&v->cnt, 1, __ATOMIC_ACQUIRE) - 1 == 0;
 }
 
 static inline int rte_atomic64_test_and_set(rte_atomic64_t *v)
-- 
1.8.3.1

Reply via email to