bihash: give hint to CPU that we are spinlocking

Change-Id: I78c0a6da5d8fc63c1ced43589c42abc15ab12b16
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c
index af624fe..8a6fa16 100644
--- a/src/vppinfra/bihash_template.c
+++ b/src/vppinfra/bihash_template.c
@@ -508,7 +508,7 @@
     {
       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 6303992..9bf4737 100644
--- a/src/vppinfra/bihash_template.h
+++ b/src/vppinfra/bihash_template.h
@@ -27,6 +27,7 @@
 #include <vppinfra/format.h>
 #include <vppinfra/pool.h>
 #include <vppinfra/cache.h>
+#include <vppinfra/lock.h>
 
 #ifndef BIHASH_TYPE
 #error BIHASH_TYPE not defined
@@ -106,7 +107,7 @@
 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 @@
       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 @@
     {
       volatile BVT (clib_bihash_bucket) * bv = b;
       while (bv->lock)
-	;
+	CLIB_PAUSE ();
     }
 
   hash >>= h->log2_nbuckets;
@@ -291,7 +293,7 @@
     {
       volatile BVT (clib_bihash_bucket) * bv = b;
       while (bv->lock)
-	;
+	CLIB_PAUSE ();
     }
 
   hash >>= h->log2_nbuckets;