Thread safe internal buffer manager
[vpp.git] / src / vlib / buffer.h
index c810db4..9047ca9 100644 (file)
@@ -44,6 +44,7 @@
 #include <vppinfra/cache.h>
 #include <vppinfra/serialize.h>
 #include <vppinfra/vector.h>
+#include <vppinfra/lock.h>
 #include <vlib/error.h>                /* for vlib_error_t */
 
 #include <vlib/config.h>       /* for __PRE_DATA_SIZE */
@@ -87,17 +88,17 @@ typedef struct
 /* any change to the following line requres update of
  * vlib_buffer_get_free_list_index(...) and
  * vlib_buffer_set_free_list_index(...) functions */
-#define VLIB_BUFFER_FREE_LIST_INDEX_MASK ((1 << 4) - 1)
+#define VLIB_BUFFER_FREE_LIST_INDEX_MASK ((1 << 5) - 1)
 
-#define VLIB_BUFFER_IS_TRACED (1 << 4)
-#define VLIB_BUFFER_LOG2_NEXT_PRESENT (5)
+#define VLIB_BUFFER_IS_TRACED (1 << 5)
+#define VLIB_BUFFER_LOG2_NEXT_PRESENT (6)
 #define VLIB_BUFFER_NEXT_PRESENT (1 << VLIB_BUFFER_LOG2_NEXT_PRESENT)
-#define VLIB_BUFFER_IS_RECYCLED (1 << 6)
-#define VLIB_BUFFER_TOTAL_LENGTH_VALID (1 << 7)
-#define VLIB_BUFFER_REPL_FAIL (1 << 8)
-#define VLIB_BUFFER_RECYCLE (1 << 9)
-#define VLIB_BUFFER_FLOW_REPORT (1 << 10)
-#define VLIB_BUFFER_EXT_HDR_VALID (1 << 11)
+#define VLIB_BUFFER_IS_RECYCLED (1 << 7)
+#define VLIB_BUFFER_TOTAL_LENGTH_VALID (1 << 8)
+#define VLIB_BUFFER_REPL_FAIL (1 << 9)
+#define VLIB_BUFFER_RECYCLE (1 << 10)
+#define VLIB_BUFFER_FLOW_REPORT (1 << 11)
+#define VLIB_BUFFER_EXT_HDR_VALID (1 << 12)
 
   /* User defined buffer flags. */
 #define LOG2_VLIB_BUFFER_FLAG_USER(n) (32 - (n))
@@ -423,6 +424,7 @@ typedef struct
      If buffer index is not in hash table then this buffer
      has never been allocated. */
   uword *buffer_known_hash;
+  clib_spinlock_t buffer_known_hash_lockp;
 
   /* List of free-lists needing Blue Light Special announcements */
   vlib_buffer_free_list_t **announce_list;