From 2a03efe4c2d716de4cfd032594f4f1e88859d3dd Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Fri, 20 Jul 2018 21:48:59 +0200 Subject: [PATCH] bihash: give hint to CPU that we are spinlocking Change-Id: I78c0a6da5d8fc63c1ced43589c42abc15ab12b16 Signed-off-by: Damjan Marion --- src/vppinfra/bihash_template.c | 2 +- src/vppinfra/bihash_template.h | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c index af624fee070..8a6fa16389b 100644 --- a/src/vppinfra/bihash_template.c +++ b/src/vppinfra/bihash_template.c @@ -508,7 +508,7 @@ int BV (clib_bihash_search) { volatile BVT (clib_bihash_bucket) * bv = b; while (bv->lock) - ; + CLIB_PAUSE (); } hash >>= h->log2_nbuckets; diff --git a/src/vppinfra/bihash_template.h b/src/vppinfra/bihash_template.h index 6303992bc57..9bf4737cd84 100644 --- a/src/vppinfra/bihash_template.h +++ b/src/vppinfra/bihash_template.h @@ -27,6 +27,7 @@ #include #include #include +#include #ifndef BIHASH_TYPE #error BIHASH_TYPE not defined @@ -106,7 +107,7 @@ typedef struct static inline void BV (clib_bihash_alloc_lock) (BVT (clib_bihash) * h) { while (__atomic_test_and_set (h->alloc_lock, __ATOMIC_ACQUIRE)) - ; + CLIB_PAUSE (); } static inline void BV (clib_bihash_alloc_unlock) (BVT (clib_bihash) * h) @@ -123,6 +124,7 @@ static inline void BV (clib_bihash_lock_bucket) (BVT (clib_bihash_bucket) * b) locked_bucket.as_u64 = unlocked_bucket.as_u64 = b->as_u64; unlocked_bucket.lock = 0; locked_bucket.lock = 1; + CLIB_PAUSE (); } while (__atomic_compare_exchange_n (&b->as_u64, &unlocked_bucket.as_u64, locked_bucket.as_u64, 1 /* weak */ , @@ -203,7 +205,7 @@ static inline int BV (clib_bihash_search_inline_with_hash) { volatile BVT (clib_bihash_bucket) * bv = b; while (bv->lock) - ; + CLIB_PAUSE (); } hash >>= h->log2_nbuckets; @@ -291,7 +293,7 @@ static inline int BV (clib_bihash_search_inline_2_with_hash) { volatile BVT (clib_bihash_bucket) * bv = b; while (bv->lock) - ; + CLIB_PAUSE (); } hash >>= h->log2_nbuckets; -- 2.16.6