Removed odp_spin() and replaced usage with odp_cpu_pause().

Signed-off-by: Petri Savolainen <[email protected]>
---
 platform/linux-generic/Makefile.am                 |  1 -
 platform/linux-generic/include/odp_spin_internal.h | 58 ----------------------
 platform/linux-generic/odp_barrier.c               |  4 +-
 platform/linux-generic/odp_rwlock.c                |  7 ++-
 platform/linux-generic/odp_schedule.c              |  4 +-
 platform/linux-generic/odp_spinlock.c              |  5 +-
 platform/linux-generic/odp_ticketlock.c            |  4 +-
 platform/linux-generic/odp_timer.c                 | 10 ++--
 8 files changed, 16 insertions(+), 77 deletions(-)
 delete mode 100644 platform/linux-generic/include/odp_spin_internal.h

diff --git a/platform/linux-generic/Makefile.am 
b/platform/linux-generic/Makefile.am
index ffb4c45..9fbb3bd 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -109,7 +109,6 @@ noinst_HEADERS = \
                  ${srcdir}/include/odp_queue_internal.h \
                  ${srcdir}/include/odp_schedule_internal.h \
                  ${srcdir}/include/odp_sorted_list_internal.h \
-                 ${srcdir}/include/odp_spin_internal.h \
                  ${srcdir}/include/odp_timer_internal.h \
                  ${srcdir}/include/odp_timer_wheel_internal.h \
                  ${srcdir}/include/odp_traffic_mngr_internal.h \
diff --git a/platform/linux-generic/include/odp_spin_internal.h 
b/platform/linux-generic/include/odp_spin_internal.h
deleted file mode 100644
index 29c524f..0000000
--- a/platform/linux-generic/include/odp_spin_internal.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) 2013, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier:     BSD-3-Clause
- */
-
-
-
-#ifndef ODP_SPIN_INTERNAL_H_
-#define ODP_SPIN_INTERNAL_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * Spin loop for ODP internal use
- */
-static inline void odp_spin(void)
-{
-#if defined __x86_64__ || defined __i386__
-
-#ifdef __SSE2__
-       __asm__ __volatile__ ("pause");
-#else
-       __asm__ __volatile__ ("rep; nop");
-#endif
-
-#elif defined __arm__
-
-#if __ARM_ARCH == 7
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-#endif
-
-#elif defined __OCTEON__
-
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-       __asm__ __volatile__ ("nop");
-
-#endif
-}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/platform/linux-generic/odp_barrier.c 
b/platform/linux-generic/odp_barrier.c
index 53d83c0..0bfc0f0 100644
--- a/platform/linux-generic/odp_barrier.c
+++ b/platform/linux-generic/odp_barrier.c
@@ -6,7 +6,7 @@
 
 #include <odp/barrier.h>
 #include <odp/sync.h>
-#include <odp_spin_internal.h>
+#include <odp/cpu.h>
 #include <odp_atomic_internal.h>
 
 void odp_barrier_init(odp_barrier_t *barrier, int count)
@@ -43,7 +43,7 @@ void odp_barrier_wait(odp_barrier_t *barrier)
        } else {
                while ((odp_atomic_load_u32(&barrier->bar) < barrier->count)
                                == wasless)
-                       odp_spin();
+                       odp_cpu_pause();
        }
 
        _ODP_FULL_BARRIER();
diff --git a/platform/linux-generic/odp_rwlock.c 
b/platform/linux-generic/odp_rwlock.c
index 47c15ef..0b8bb46 100644
--- a/platform/linux-generic/odp_rwlock.c
+++ b/platform/linux-generic/odp_rwlock.c
@@ -8,8 +8,7 @@
 #include <odp/atomic.h>
 #include <odp_atomic_internal.h>
 #include <odp/rwlock.h>
-
-#include <odp_spin_internal.h>
+#include <odp/cpu.h>
 
 void odp_rwlock_init(odp_rwlock_t *rwlock)
 {
@@ -25,7 +24,7 @@ void odp_rwlock_read_lock(odp_rwlock_t *rwlock)
                cnt = _odp_atomic_u32_load_mm(&rwlock->cnt, _ODP_MEMMODEL_RLX);
                /* waiting for read lock */
                if ((int32_t)cnt < 0) {
-                       odp_spin();
+                       odp_cpu_pause();
                        continue;
                }
                is_locked = _odp_atomic_u32_cmp_xchg_strong_mm(&rwlock->cnt,
@@ -51,7 +50,7 @@ void odp_rwlock_write_lock(odp_rwlock_t *rwlock)
                cnt = _odp_atomic_u32_load_mm(&rwlock->cnt, _ODP_MEMMODEL_RLX);
                /* lock acquired, wait */
                if (cnt != 0) {
-                       odp_spin();
+                       odp_cpu_pause();
                        continue;
                }
                is_locked = _odp_atomic_u32_cmp_xchg_strong_mm(&rwlock->cnt,
diff --git a/platform/linux-generic/odp_schedule.c 
b/platform/linux-generic/odp_schedule.c
index e0fadfa..1aa60c2 100644
--- a/platform/linux-generic/odp_schedule.c
+++ b/platform/linux-generic/odp_schedule.c
@@ -19,10 +19,10 @@
 #include <odp/time.h>
 #include <odp/spinlock.h>
 #include <odp/hints.h>
+#include <odp/cpu.h>
 
 #include <odp_queue_internal.h>
 #include <odp_packet_io_internal.h>
-#include <odp_spin_internal.h>
 
 odp_thrmask_t sched_mask_all;
 
@@ -894,7 +894,7 @@ void odp_schedule_order_lock(unsigned lock_index)
         * some events in the ordered flow need to lock.
         */
        while (sync != sync_out) {
-               odp_spin();
+               odp_cpu_pause();
                sync_out =
                        odp_atomic_load_u64(&origin_qe->s.sync_out[lock_index]);
        }
diff --git a/platform/linux-generic/odp_spinlock.c 
b/platform/linux-generic/odp_spinlock.c
index f165720..6a16dc4 100644
--- a/platform/linux-generic/odp_spinlock.c
+++ b/platform/linux-generic/odp_spinlock.c
@@ -5,9 +5,8 @@
  */
 
 #include <odp/spinlock.h>
+#include <odp/cpu.h>
 #include <odp_atomic_internal.h>
-#include <odp_spin_internal.h>
-
 
 void odp_spinlock_init(odp_spinlock_t *spinlock)
 {
@@ -23,7 +22,7 @@ void odp_spinlock_lock(odp_spinlock_t *spinlock)
                 * the loop will exit when the lock becomes available
                 * and we will retry the TAS operation above */
                while (_odp_atomic_flag_load(&spinlock->lock))
-                       odp_spin();
+                       odp_cpu_pause();
 }
 
 
diff --git a/platform/linux-generic/odp_ticketlock.c 
b/platform/linux-generic/odp_ticketlock.c
index 3e2a4ec..6ab2b9a 100644
--- a/platform/linux-generic/odp_ticketlock.c
+++ b/platform/linux-generic/odp_ticketlock.c
@@ -8,7 +8,7 @@
 #include <odp/atomic.h>
 #include <odp_atomic_internal.h>
 #include <odp/sync.h>
-#include <odp_spin_internal.h>
+#include <odp/cpu.h>
 
 
 void odp_ticketlock_init(odp_ticketlock_t *ticketlock)
@@ -31,7 +31,7 @@ void odp_ticketlock_lock(odp_ticketlock_t *ticketlock)
         * all stores from the previous lock owner */
        while (ticket != _odp_atomic_u32_load_mm(&ticketlock->cur_ticket,
                                                 _ODP_MEMMODEL_ACQ))
-               odp_spin();
+               odp_cpu_pause();
 }
 
 int odp_ticketlock_trylock(odp_ticketlock_t *tklock)
diff --git a/platform/linux-generic/odp_timer.c 
b/platform/linux-generic/odp_timer.c
index 5c1f8ca..b8f34fb 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -33,6 +33,7 @@
 #include <odp_atomic_internal.h>
 #include <odp/buffer.h>
 #include <odp_buffer_inlines.h>
+#include <odp/cpu.h>
 #include <odp/pool.h>
 #include <odp_pool_internal.h>
 #include <odp/debug.h>
@@ -42,7 +43,6 @@
 #include <odp_internal.h>
 #include <odp/queue.h>
 #include <odp/shared_memory.h>
-#include <odp_spin_internal.h>
 #include <odp/spinlock.h>
 #include <odp/std_types.h>
 #include <odp/sync.h>
@@ -408,7 +408,7 @@ static bool timer_reset(uint32_t idx,
                while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                        /* While lock is taken, spin using relaxed loads */
                        while (_odp_atomic_flag_load(IDX2LOCK(idx)))
-                               odp_spin();
+                               odp_cpu_pause();
 
                /* Only if there is a timeout buffer can be reset the timer */
                if (odp_likely(tb->tmo_buf != ODP_BUFFER_INVALID)) {
@@ -455,7 +455,7 @@ static bool timer_reset(uint32_t idx,
                while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                        /* While lock is taken, spin using relaxed loads */
                        while (_odp_atomic_flag_load(IDX2LOCK(idx)))
-                               odp_spin();
+                               odp_cpu_pause();
 
                /* Swap in new buffer, save any old buffer */
                old_buf = tb->tmo_buf;
@@ -496,7 +496,7 @@ static odp_buffer_t timer_cancel(odp_timer_pool *tp,
        while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                /* While lock is taken, spin using relaxed loads */
                while (_odp_atomic_flag_load(IDX2LOCK(idx)))
-                       odp_spin();
+                       odp_cpu_pause();
 
        /* Update the timer state (e.g. cancel the current timeout) */
        tb->exp_tck.v = new_state;
@@ -550,7 +550,7 @@ static unsigned timer_expire(odp_timer_pool *tp, uint32_t 
idx, uint64_t tick)
        while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                /* While lock is taken, spin using relaxed loads */
                while (_odp_atomic_flag_load(IDX2LOCK(idx)))
-                       odp_spin();
+                       odp_cpu_pause();
        /* Proper check for timer expired */
        exp_tck = tb->exp_tck.v;
        if (odp_likely(exp_tck <= tick)) {
-- 
2.6.3

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to