diff options
author | Petri Savolainen <petri.savolainen@linaro.org> | 2018-06-04 14:18:12 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-06-07 15:49:41 +0300 |
commit | c3c447c96ab63092461dee2bac607f59a21bf8de (patch) | |
tree | 5bca051dc1d0cbc0012fdac90775772663afee0f /platform/linux-generic/odp_queue_lf.c | |
parent | c7bf6a71fe08f3ba8228eced708c9d05496a825a (diff) |
linux-gen: queue_lf: wrap is_lock_free function
Wrap GCC built-in __atomic_is_lock_free function so that it
can be overridden on ARMv8.
Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/odp_queue_lf.c')
-rw-r--r-- | platform/linux-generic/odp_queue_lf.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/platform/linux-generic/odp_queue_lf.c b/platform/linux-generic/odp_queue_lf.c index b3cfbdbe7..1c3c6bc45 100644 --- a/platform/linux-generic/odp_queue_lf.c +++ b/platform/linux-generic/odp_queue_lf.c @@ -52,6 +52,11 @@ static inline int atomic_cas_acq_u128(u128_t *atomic, u128_t old_val, __ATOMIC_RELAXED); } +static inline int atomic_is_lockfree_u128(void) +{ + return __atomic_is_lock_free(16, NULL); +} + #else /* These definitions enable build in non 128 bit compatible systems. @@ -86,6 +91,11 @@ static inline int atomic_cas_acq_u128(u128_t *atomic, u128_t old_val, return atomic_cas_rel_u128(atomic, old_val, new_val); } +static inline int atomic_is_lockfree_u128(void) +{ + return 0; +} + #endif /* Node in lock-free ring */ @@ -263,12 +273,10 @@ uint32_t queue_lf_init_global(uint32_t *queue_lf_size, queue_lf_func_t *lf_func) { odp_shm_t shm; - bool lockfree = 0; + int lockfree; /* 16 byte lockfree CAS operation is needed. */ -#ifdef __SIZEOF_INT128__ - lockfree = __atomic_is_lock_free(16, NULL); -#endif + lockfree = atomic_is_lockfree_u128(); ODP_DBG("\nLock-free queue init\n"); ODP_DBG(" u128 lock-free: %i\n\n", lockfree); |