buffers: remove free-list information from buffer metadata 94/16894/4
authorDamjan Marion <damarion@cisco.com>
Fri, 18 Jan 2019 19:45:30 +0000 (20:45 +0100)
committerFlorin Coras <florin.coras@gmail.com>
Sat, 19 Jan 2019 00:17:51 +0000 (00:17 +0000)
Change-Id: I6048c6a51efa826ac333f7d15919cb87dd766d74
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/plugins/dpdk/buffer.c
src/vlib/buffer.c
src/vlib/buffer.h
src/vlib/buffer_funcs.h
src/vlib/main.c
src/vnet/dhcp/dhcp6_proxy_node.c
src/vnet/dns/dns.c
src/vnet/ip/ping.c
src/vnet/sctp/sctp_output.c
src/vnet/tcp/tcp_output.c

index 7093b01..768d661 100644 (file)
@@ -290,8 +290,7 @@ vlib_buffer_free_inline (vlib_main_t * vm,
   vlib_buffer_t *bufp[n_buffers], **b = bufp;
   u32 thread_index = vlib_get_thread_index ();
   int i = 0;
-  u32 simple_mask = (VLIB_BUFFER_NON_DEFAULT_FREELIST |
-                    VLIB_BUFFER_NEXT_PRESENT);
+  u32 simple_mask = VLIB_BUFFER_NEXT_PRESENT;
   u32 n_left, *bi;
   u32 (*cb) (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
             u32 follow_buffer_next);
index 07f91c3..0251f52 100644 (file)
@@ -87,9 +87,9 @@ format_vlib_buffer (u8 * s, va_list * args)
     a = format (a, "%s ", v);
   foreach_vlib_buffer_flag
 #undef _
-    s = format (s, "current data %d, length %d, free-list %d, clone-count %u",
-               b->current_data, b->current_length,
-               vlib_buffer_get_free_list_index (b), b->n_add_refs);
+    s = format (s, "current data %d, length %d, buffer-pool %d, "
+               "clone-count %u", b->current_data, b->current_length,
+               b->buffer_pool_index, b->n_add_refs);
 
   if (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID)
     s = format (s, ", totlen-nifb %d",
@@ -182,14 +182,8 @@ vlib_validate_buffer_helper (vlib_main_t * vm,
   vlib_buffer_t *b = vlib_get_buffer (vm, bi);
   vlib_buffer_free_list_t *fl;
 
-  if (pool_is_free_index
-      (vm->buffer_free_list_pool, vlib_buffer_get_free_list_index (b)))
-    return format (0, "unknown free list 0x%x",
-                  vlib_buffer_get_free_list_index (b));
-
-  fl =
-    pool_elt_at_index (vm->buffer_free_list_pool,
-                      vlib_buffer_get_free_list_index (b));
+  fl = pool_elt_at_index (vm->buffer_free_list_pool,
+                         VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
 
   if ((signed) b->current_data < (signed) -VLIB_BUFFER_PRE_DATA_SIZE)
     return format (0, "current data %d before pre-data", b->current_data);
@@ -394,7 +388,6 @@ vlib_buffer_create_free_list_helper (vlib_main_t * vm,
   f->name = clib_mem_is_vec (name) ? name : format (0, "%s", name);
 
   /* Setup free buffer template. */
-  vlib_buffer_set_free_list_index (&f->buffer_init_template, f->index);
   f->buffer_init_template.n_add_refs = 0;
 
   if (is_public)
@@ -567,10 +560,10 @@ recycle_or_free (vlib_main_t * vm, vlib_buffer_main_t * bm, u32 bi,
                 vlib_buffer_t * b, u32 follow_buffer_next)
 {
   vlib_buffer_free_list_t *fl;
-  vlib_buffer_free_list_index_t fi;
   u32 flags, next;
 
-  fl = vlib_buffer_get_buffer_free_list (vm, b, &fi);
+  fl = pool_elt_at_index (vm->buffer_free_list_pool,
+                         VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
 
   do
     {
index 68d6c5e..56d8551 100644 (file)
@@ -72,11 +72,10 @@ typedef u8 vlib_buffer_free_list_index_t;
  * Buffer Flags
  */
 #define foreach_vlib_buffer_flag \
-  _( 0, NON_DEFAULT_FREELIST, "non-default-fl")                \
-  _( 1, IS_TRACED, 0)                                  \
-  _( 2, NEXT_PRESENT, 0)                               \
-  _( 3, TOTAL_LENGTH_VALID, 0)                         \
-  _( 4, EXT_HDR_VALID, "ext-hdr-valid")
+  _( 0, IS_TRACED, 0)                                  \
+  _( 1, NEXT_PRESENT, 0)                               \
+  _( 2, TOTAL_LENGTH_VALID, 0)                         \
+  _( 3, EXT_HDR_VALID, "ext-hdr-valid")
 
 /* NOTE: only buffer generic flags should be defined here, please consider
    using user flags. i.e. src/vnet/buffer.h */
@@ -98,7 +97,7 @@ enum
   /* User defined buffer flags. */
 #define LOG2_VLIB_BUFFER_FLAG_USER(n) (32 - (n))
 #define VLIB_BUFFER_FLAG_USER(n) (1 << LOG2_VLIB_BUFFER_FLAG_USER(n))
-#define VLIB_BUFFER_FLAGS_ALL (0x1f)
+#define VLIB_BUFFER_FLAGS_ALL (0x0f)
 
 /* VLIB buffer representation. */
 typedef struct
@@ -161,10 +160,7 @@ typedef struct
   /**< Only valid for first buffer in chain. Current length plus
      total length given here give total number of bytes in buffer chain.
   */
-  vlib_buffer_free_list_index_t free_list_index; /** < only used if
-                                                  VLIB_BUFFER_NON_DEFAULT_FREELIST
-                                                  flag is set */
-  u8 align_pad[3]; /**< available */
+  u8 align_pad[4]; /**< available */
   u32 opaque2[12];  /**< More opaque data, see ../vnet/vnet/buffer.h */
 
   /***** end of second cache line */
index cc72c57..41b5164 100644 (file)
@@ -400,28 +400,6 @@ vlib_buffer_round_size (u32 size)
   return round_pow2 (size, sizeof (vlib_buffer_t));
 }
 
-always_inline vlib_buffer_free_list_index_t
-vlib_buffer_get_free_list_index (vlib_buffer_t * b)
-{
-  if (PREDICT_FALSE (b->flags & VLIB_BUFFER_NON_DEFAULT_FREELIST))
-    return b->free_list_index;
-
-  return 0;
-}
-
-always_inline void
-vlib_buffer_set_free_list_index (vlib_buffer_t * b,
-                                vlib_buffer_free_list_index_t index)
-{
-  if (PREDICT_FALSE (index))
-    {
-      b->flags |= VLIB_BUFFER_NON_DEFAULT_FREELIST;
-      b->free_list_index = index;
-    }
-  else
-    b->flags &= ~VLIB_BUFFER_NON_DEFAULT_FREELIST;
-}
-
 /** \brief Allocate buffers from specific freelist into supplied array
 
     @param vm - (vlib_main_t *) vlib main data structure pointer
@@ -651,16 +629,6 @@ void vlib_buffer_free_list_fill_unaligned (vlib_main_t * vm,
                                           free_list,
                                           uword n_unaligned_buffers);
 
-always_inline vlib_buffer_free_list_t *
-vlib_buffer_get_buffer_free_list (vlib_main_t * vm, vlib_buffer_t * b,
-                                 vlib_buffer_free_list_index_t * index)
-{
-  vlib_buffer_free_list_index_t i;
-
-  *index = i = vlib_buffer_get_free_list_index (b);
-  return pool_elt_at_index (vm->buffer_free_list_pool, i);
-}
-
 always_inline vlib_buffer_free_list_t *
 vlib_buffer_get_free_list (vlib_main_t * vm,
                           vlib_buffer_free_list_index_t free_list_index)
@@ -789,18 +757,13 @@ vlib_buffer_clone_256 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
       return 1;
     }
 
-  n_buffers = vlib_buffer_alloc_from_free_list (vm, buffers, n_buffers,
-                                               vlib_buffer_get_free_list_index
-                                               (s));
+  n_buffers = vlib_buffer_alloc (vm, buffers, n_buffers);
 
   for (i = 0; i < n_buffers; i++)
     {
       vlib_buffer_t *d = vlib_get_buffer (vm, buffers[i]);
       d->current_data = s->current_data;
       d->current_length = head_end_offset;
-      vlib_buffer_set_free_list_index (d,
-                                      vlib_buffer_get_free_list_index (s));
-
       d->total_length_not_including_first_buffer = s->current_length -
        head_end_offset;
       if (PREDICT_FALSE (s->flags & VLIB_BUFFER_NEXT_PRESENT))
@@ -875,8 +838,6 @@ vlib_buffer_attach_clone (vlib_main_t * vm, vlib_buffer_t * head,
                          vlib_buffer_t * tail)
 {
   ASSERT ((head->flags & VLIB_BUFFER_NEXT_PRESENT) == 0);
-  ASSERT (vlib_buffer_get_free_list_index (head) ==
-         vlib_buffer_get_free_list_index (tail));
 
   head->flags |= VLIB_BUFFER_NEXT_PRESENT;
   head->flags &= ~VLIB_BUFFER_TOTAL_LENGTH_VALID;
@@ -1026,7 +987,6 @@ vlib_buffer_init_for_free_list (vlib_buffer_t * dst,
 
   /* Not in the first 16 octets. */
   dst->n_add_refs = src->n_add_refs;
-  vlib_buffer_set_free_list_index (dst, fl->index);
 
   /* Make sure it really worked. */
 #define _(f) ASSERT (dst->f == src->f);
@@ -1159,9 +1119,10 @@ vlib_buffer_chain_compress (vlib_main_t * vm,
       return;
     }
   /* probe free list to find allocated buffer size to avoid overfill */
-  vlib_buffer_free_list_index_t index;
-  vlib_buffer_free_list_t *free_list =
-    vlib_buffer_get_buffer_free_list (vm, first, &index);
+  vlib_buffer_free_list_t *free_list;
+
+  free_list = pool_elt_at_index (vm->buffer_free_list_pool,
+                                VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
 
   u32 want_first_size = clib_min (VLIB_BUFFER_CHAIN_MIN_FIRST_DATA_SIZE,
                                  free_list->n_data_bytes -
@@ -1212,7 +1173,7 @@ vlib_buffer_chain_linearize (vlib_main_t * vm, vlib_buffer_t * first)
 {
   vlib_buffer_t *b = first;
   vlib_buffer_free_list_t *fl =
-    vlib_buffer_get_free_list (vm, vlib_buffer_get_free_list_index (b));
+    vlib_buffer_get_free_list (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
   u32 buf_len = fl->n_data_bytes;
   // free buffer chain starting from the second buffer
   int free_count = (b->flags & VLIB_BUFFER_NEXT_PRESENT) != 0;
index ae78c43..650fa28 100644 (file)
@@ -987,7 +987,6 @@ format_buffer_metadata (u8 * s, va_list * args)
              "trace_index: %d, recycle_count: %d, len_not_first_buf: %d\n",
              b->trace_index, b->recycle_count,
              b->total_length_not_including_first_buffer);
-  s = format (s, "free_list_index: %d\n", (u32) (b->free_list_index));
   return s;
 }
 
index 432bc8d..ea06c18 100644 (file)
@@ -315,9 +315,8 @@ dhcpv6_proxy_to_server_input (vlib_main_t * vm,
          copy_ip6_address (&r1->link_addr, ia0);
 
        link_address_set:
-         fl =
-           vlib_buffer_get_free_list (vm,
-                                      vlib_buffer_get_free_list_index (b0));
+         fl = vlib_buffer_get_free_list
+           (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
 
          if ((b0->current_length + sizeof (*id1) + sizeof (*vss1) +
               sizeof (*cmac)) > fl->n_data_bytes)
index 93b7fb8..15d40be 100644 (file)
@@ -2810,7 +2810,6 @@ vnet_send_dns4_reply (dns_main_t * dm, dns_pending_request_t * pr,
    * In the resolution-required / deferred case, resetting a freshly-allocated
    * buffer won't hurt. We hope.
    */
-  b0->flags &= VLIB_BUFFER_NON_DEFAULT_FREELIST;
   b0->flags |= (VNET_BUFFER_F_LOCALLY_ORIGINATED
                | VLIB_BUFFER_TOTAL_LENGTH_VALID);
   b0->current_data = 0;
index f147e47..92a92e5 100755 (executable)
@@ -404,8 +404,7 @@ init_icmp46_echo_request (vlib_main_t * vm, vlib_buffer_t * b0,
       int this_buf_data_len =
        remaining_data_len <
        VLIB_BUFFER_DATA_SIZE ? remaining_data_len : VLIB_BUFFER_DATA_SIZE;
-      int n_alloc = vlib_buffer_alloc_from_free_list (vm, &b0->next_buffer, 1,
-                                                     hb->free_list_index);
+      int n_alloc = vlib_buffer_alloc (vm, &b0->next_buffer, 1);
       if (n_alloc < 1)
        {
          /* That is how much we have so far - return it... */
index c0e1a6e..17b28a8 100644 (file)
@@ -271,7 +271,6 @@ always_inline void *
 sctp_init_buffer (vlib_main_t * vm, vlib_buffer_t * b)
 {
   ASSERT ((b->flags & VLIB_BUFFER_NEXT_PRESENT) == 0);
-  b->flags &= VLIB_BUFFER_NON_DEFAULT_FREELIST;
   b->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
   b->total_length_not_including_first_buffer = 0;
   vnet_buffer (b)->sctp.flags = 0;
index 97f5b81..8d06ea3 100644 (file)
@@ -519,7 +519,6 @@ static void *
 tcp_init_buffer (vlib_main_t * vm, vlib_buffer_t * b)
 {
   ASSERT ((b->flags & VLIB_BUFFER_NEXT_PRESENT) == 0);
-  b->flags &= VLIB_BUFFER_NON_DEFAULT_FREELIST;
   b->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
   b->total_length_not_including_first_buffer = 0;
   b->current_data = 0;