No functional changes, just make code more readable.

Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org>
---
 platform/linux-generic/odp_timer.c | 76 +++++++++++++++++++++++++++-----------
 1 file changed, 54 insertions(+), 22 deletions(-)

diff --git a/platform/linux-generic/odp_timer.c 
b/platform/linux-generic/odp_timer.c
index 33c2758..36480ed 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -334,6 +334,7 @@ static inline odp_buffer_t timer_free(odp_timer_pool *tp, 
uint32_t idx)
  * expire/reset/cancel timer
  *****************************************************************************/
 
+#ifdef ODP_ATOMIC_U128
 static bool timer_reset(uint32_t idx,
                uint64_t abs_tck,
                odp_buffer_t *tmo_buf,
@@ -343,8 +344,8 @@ static bool timer_reset(uint32_t idx,
        tick_buf_t *tb = &tp->tick_buf[idx];
 
        if (tmo_buf == NULL || *tmo_buf == ODP_BUFFER_INVALID) {
-#ifdef ODP_ATOMIC_U128
                tick_buf_t new, old;
+
                do {
                        /* Relaxed and non-atomic read of current values */
                        old.exp_tck.v = tb->exp_tck.v;
@@ -370,11 +371,52 @@ static bool timer_reset(uint32_t idx,
                                        (_uint128_t *)&new,
                                        _ODP_MEMMODEL_RLS,
                                        _ODP_MEMMODEL_RLX));
-#else
+       } else {
+               /* We have a new timeout buffer which replaces any old one */
+               /* Fill in header fields if timeout event */
+               if (_odp_buffer_type(*tmo_buf) == ODP_EVENT_TIMEOUT) {
+                       /* Convert from buffer to timeout hdr */
+                       odp_timeout_hdr_t *tmo_hdr =
+                               timeout_hdr_from_buf(*tmo_buf);
+                       tmo_hdr->timer = tp_idx_to_handle(tp, idx);
+                       tmo_hdr->user_ptr = tp->timers[idx].user_ptr;
+                       /* expiration field filled in when timer expires */
+               }
+               /* Else ignore buffers of other types */
+               odp_buffer_t old_buf = ODP_BUFFER_INVALID;
+               tick_buf_t new, old;
+               new.exp_tck.v = abs_tck;
+               new.tmo_buf = *tmo_buf;
+               TB_SET_PAD(new);
+               /* We are releasing the new timeout buffer to some other
+                * thread */
+               _odp_atomic_u128_xchg_mm((_odp_atomic_u128_t *)tb,
+                                        (_uint128_t *)&new,
+                                        (_uint128_t *)&old,
+                                        _ODP_MEMMODEL_ACQ_RLS);
+               old_buf = old.tmo_buf;
+               /* Return old timeout buffer */
+               *tmo_buf = old_buf;
+       }
+       return success;
+}
+
+#else /*ODP_ATOMIC_U128*/
+
+static bool timer_reset(uint32_t idx,
+               uint64_t abs_tck,
+               odp_buffer_t *tmo_buf,
+               odp_timer_pool *tp)
+{
+       bool success = true;
+       tick_buf_t *tb = &tp->tick_buf[idx];
+
+       if (tmo_buf == NULL || *tmo_buf == ODP_BUFFER_INVALID) {
 #ifdef __ARM_ARCH
                /* Since barriers are not good for C-A15, we take an
                 * alternative approach using relaxed memory model */
                uint64_t old;
+
                /* Swap in new expiration tick, get back old tick which
                 * will indicate active/inactive timer state */
                old = _odp_atomic_u64_xchg_mm(&tb->exp_tck, abs_tck,
@@ -398,7 +440,7 @@ static bool timer_reset(uint32_t idx,
                                        _ODP_MEMMODEL_RLX);
                        success = false;
                }
-#else
+#else /*__ARM_ARCH*/
                /* Take a related lock */
                while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                        /* While lock is taken, spin using relaxed loads */
@@ -417,9 +459,10 @@ static bool timer_reset(uint32_t idx,
 
                /* Release the lock */
                _odp_atomic_flag_clear(IDX2LOCK(idx));
-#endif
-#endif
+#endif /*__ARM_ARCH*/
        } else {
+               odp_buffer_t old_buf;
+
                /* We have a new timeout buffer which replaces any old one */
                /* Fill in header fields if timeout event */
                if (_odp_buffer_type(*tmo_buf) == ODP_EVENT_TIMEOUT) {
@@ -429,22 +472,10 @@ static bool timer_reset(uint32_t idx,
                        tmo_hdr->timer = tp_idx_to_handle(tp, idx);
                        tmo_hdr->user_ptr = tp->timers[idx].user_ptr;
                        /* expiration field filled in when timer expires */
+               } else {
+                       /* Else ignore buffers of other types */
                }
-               /* Else ignore buffers of other types */
-               odp_buffer_t old_buf = ODP_BUFFER_INVALID;
-#ifdef ODP_ATOMIC_U128
-               tick_buf_t new, old;
-               new.exp_tck.v = abs_tck;
-               new.tmo_buf = *tmo_buf;
-               TB_SET_PAD(new);
-               /* We are releasing the new timeout buffer to some other
-                * thread */
-               _odp_atomic_u128_xchg_mm((_odp_atomic_u128_t *)tb,
-                                        (_uint128_t *)&new,
-                                        (_uint128_t *)&old,
-                                        _ODP_MEMMODEL_ACQ_RLS);
-               old_buf = old.tmo_buf;
-#else
+
                /* Take a related lock */
                while (_odp_atomic_flag_tas(IDX2LOCK(idx)))
                        /* While lock is taken, spin using relaxed loads */
@@ -460,13 +491,14 @@ static bool timer_reset(uint32_t idx,
 
                /* Release the lock */
                _odp_atomic_flag_clear(IDX2LOCK(idx));
-#endif
+
                /* Return old timeout buffer */
                *tmo_buf = old_buf;
        }
+
        return success;
 }
-
+#endif /*ODP_ATOMIC_U128*/
 
 #ifdef ODP_ATOMIC_U128
 static odp_buffer_t timer_cancel(odp_timer_pool *tp,
-- 
1.9.1


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

Reply via email to