Replace internal non-relaxed atomics with API calls. Timer and
spinlock were not converted since those use flags and 128 variables.

Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
---
 platform/linux-generic/include/odp_pool_internal.h |  1 -
 platform/linux-generic/odp_pool.c                  |  1 -
 platform/linux-generic/odp_rwlock.c                | 23 ++++++++--------------
 platform/linux-generic/odp_ticketlock.c            | 21 ++++++--------------
 4 files changed, 14 insertions(+), 32 deletions(-)

diff --git a/platform/linux-generic/include/odp_pool_internal.h 
b/platform/linux-generic/include/odp_pool_internal.h
index b12bca8..aae020f 100644
--- a/platform/linux-generic/include/odp_pool_internal.h
+++ b/platform/linux-generic/include/odp_pool_internal.h
@@ -28,7 +28,6 @@ extern "C" {
 #include <odp/debug.h>
 #include <odp/shared_memory.h>
 #include <odp/atomic.h>
-#include <odp_atomic_internal.h>
 #include <odp/thread.h>
 #include <string.h>
 
diff --git a/platform/linux-generic/odp_pool.c 
b/platform/linux-generic/odp_pool.c
index 125d8e6..f7ce877 100644
--- a/platform/linux-generic/odp_pool.c
+++ b/platform/linux-generic/odp_pool.c
@@ -19,7 +19,6 @@
 #include <odp/hints.h>
 #include <odp/thread.h>
 #include <odp_debug_internal.h>
-#include <odp_atomic_internal.h>
 
 #include <string.h>
 #include <stdlib.h>
diff --git a/platform/linux-generic/odp_rwlock.c 
b/platform/linux-generic/odp_rwlock.c
index 47c15ef..98d53bf 100644
--- a/platform/linux-generic/odp_rwlock.c
+++ b/platform/linux-generic/odp_rwlock.c
@@ -6,7 +6,6 @@
 
 #include <stdbool.h>
 #include <odp/atomic.h>
-#include <odp_atomic_internal.h>
 #include <odp/rwlock.h>
 
 #include <odp_spin_internal.h>
@@ -22,23 +21,20 @@ void odp_rwlock_read_lock(odp_rwlock_t *rwlock)
        int  is_locked = 0;
 
        while (is_locked == 0) {
-               cnt = _odp_atomic_u32_load_mm(&rwlock->cnt, _ODP_MEMMODEL_RLX);
+               cnt = odp_atomic_load_u32(&rwlock->cnt);
                /* waiting for read lock */
                if ((int32_t)cnt < 0) {
                        odp_spin();
                        continue;
                }
-               is_locked = _odp_atomic_u32_cmp_xchg_strong_mm(&rwlock->cnt,
-                               &cnt,
-                               cnt + 1,
-                               _ODP_MEMMODEL_ACQ,
-                               _ODP_MEMMODEL_RLX);
+               is_locked = odp_atomic_cas_acq_u32(&rwlock->cnt,
+                                                  &cnt, cnt + 1);
        }
 }
 
 void odp_rwlock_read_unlock(odp_rwlock_t *rwlock)
 {
-       _odp_atomic_u32_sub_mm(&rwlock->cnt, 1, _ODP_MEMMODEL_RLS);
+       odp_atomic_sub_rel_u32(&rwlock->cnt, 1);
 }
 
 void odp_rwlock_write_lock(odp_rwlock_t *rwlock)
@@ -48,21 +44,18 @@ void odp_rwlock_write_lock(odp_rwlock_t *rwlock)
 
        while (is_locked == 0) {
                uint32_t zero = 0;
-               cnt = _odp_atomic_u32_load_mm(&rwlock->cnt, _ODP_MEMMODEL_RLX);
+               cnt = odp_atomic_load_u32(&rwlock->cnt);
                /* lock acquired, wait */
                if (cnt != 0) {
                        odp_spin();
                        continue;
                }
-               is_locked = _odp_atomic_u32_cmp_xchg_strong_mm(&rwlock->cnt,
-                               &zero,
-                               (uint32_t)-1,
-                               _ODP_MEMMODEL_ACQ,
-                               _ODP_MEMMODEL_RLX);
+               is_locked = odp_atomic_cas_acq_u32(&rwlock->cnt,
+                                                  &zero, (uint32_t)-1);
        }
 }
 
 void odp_rwlock_write_unlock(odp_rwlock_t *rwlock)
 {
-       _odp_atomic_u32_store_mm(&rwlock->cnt, 0, _ODP_MEMMODEL_RLS);
+       odp_atomic_store_rel_u32(&rwlock->cnt, 0);
 }
diff --git a/platform/linux-generic/odp_ticketlock.c 
b/platform/linux-generic/odp_ticketlock.c
index 3e2a4ec..ccc3a43 100644
--- a/platform/linux-generic/odp_ticketlock.c
+++ b/platform/linux-generic/odp_ticketlock.c
@@ -6,18 +6,15 @@
 
 #include <odp/ticketlock.h>
 #include <odp/atomic.h>
-#include <odp_atomic_internal.h>
 #include <odp/sync.h>
 #include <odp_spin_internal.h>
 
-
 void odp_ticketlock_init(odp_ticketlock_t *ticketlock)
 {
        odp_atomic_init_u32(&ticketlock->next_ticket, 0);
        odp_atomic_init_u32(&ticketlock->cur_ticket, 0);
 }
 
-
 void odp_ticketlock_lock(odp_ticketlock_t *ticketlock)
 {
        uint32_t ticket;
@@ -29,8 +26,7 @@ void odp_ticketlock_lock(odp_ticketlock_t *ticketlock)
 
        /* Spin waiting for our turn. Use load-acquire so that we acquire
         * all stores from the previous lock owner */
-       while (ticket != _odp_atomic_u32_load_mm(&ticketlock->cur_ticket,
-                                                _ODP_MEMMODEL_ACQ))
+       while (ticket != odp_atomic_load_acq_u32(&ticketlock->cur_ticket))
                odp_spin();
 }
 
@@ -55,11 +51,8 @@ int odp_ticketlock_trylock(odp_ticketlock_t *tklock)
                 * If CAS fails, it means some other thread intercepted and
                 * took a ticket which means the lock is not available
                 * anymore */
-               if (_odp_atomic_u32_cmp_xchg_strong_mm(&tklock->next_ticket,
-                                                      &next,
-                                                      next + 1,
-                                                      _ODP_MEMMODEL_ACQ,
-                                                      _ODP_MEMMODEL_RLX))
+               if (odp_atomic_cas_acq_u32(&tklock->next_ticket,
+                                          &next, next + 1))
                        return 1;
        }
        return 0;
@@ -72,17 +65,15 @@ void odp_ticketlock_unlock(odp_ticketlock_t *ticketlock)
         * 'cur_ticket', we don't need to do this with an (expensive)
         * atomic RMW operation. Instead load-relaxed the current value
         * and a store-release of the incremented value */
-       uint32_t cur = _odp_atomic_u32_load_mm(&ticketlock->cur_ticket,
-                                              _ODP_MEMMODEL_RLX);
-       _odp_atomic_u32_store_mm(&ticketlock->cur_ticket, cur + 1,
-                                _ODP_MEMMODEL_RLS);
+       uint32_t cur = odp_atomic_load_u32(&ticketlock->cur_ticket);
+
+       odp_atomic_store_rel_u32(&ticketlock->cur_ticket, cur + 1);
 
 #if defined __OCTEON__
        odp_sync_stores(); /* SYNCW to flush write buffer */
 #endif
 }
 
-
 int odp_ticketlock_is_locked(odp_ticketlock_t *ticketlock)
 {
        /* Compare 'cur_ticket' with 'next_ticket'. Ideally we should read
-- 
2.6.3

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to