dpdk: add detection of mellanox PMDs
[vpp.git] / src / plugins / dpdk / buffer.c
index 2ce3d87..edace2a 100644 (file)
@@ -280,30 +280,9 @@ static_always_inline void
 recycle_or_free (vlib_main_t * vm, vlib_buffer_main_t * bm, u32 bi,
                 vlib_buffer_t * b)
 {
-  vlib_buffer_free_list_t *fl;
   u32 thread_index = vlib_get_thread_index ();
-  vlib_buffer_free_list_index_t fi;
-  fl = vlib_buffer_get_buffer_free_list (vm, b, &fi);
 
-  /* The only current use of this callback: multicast recycle */
-  if (PREDICT_FALSE (fl->buffers_added_to_freelist_function != 0))
-    {
-      int j;
-
-      vlib_buffer_add_to_free_list (vm, fl, bi,
-                                   (b->flags & VLIB_BUFFER_RECYCLE) == 0);
-
-      for (j = 0; j < vec_len (vm->buffer_announce_list); j++)
-       {
-         if (fl == vm->buffer_announce_list[j])
-           goto already_announced;
-       }
-      vec_add1 (vm->buffer_announce_list, fl);
-    already_announced:
-      ;
-    }
-  else if (PREDICT_TRUE ((b->flags & VLIB_BUFFER_RECYCLE) == 0))
-    dpdk_rte_pktmbuf_free (vm, thread_index, b, 1);
+  dpdk_rte_pktmbuf_free (vm, thread_index, b, 1);
 }
 
 static_always_inline void
@@ -314,7 +293,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_RECYCLE |
+  u32 simple_mask = (VLIB_BUFFER_NON_DEFAULT_FREELIST |
                     VLIB_BUFFER_NEXT_PRESENT);
   u32 n_left, *bi;
   u32 (*cb) (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
@@ -379,16 +358,6 @@ vlib_buffer_free_inline (vlib_main_t * vm,
       b += 1;
       n_left -= 1;
     }
-  if (vec_len (vm->buffer_announce_list))
-    {
-      vlib_buffer_free_list_t *fl;
-      for (i = 0; i < vec_len (vm->buffer_announce_list); i++)
-       {
-         fl = vm->buffer_announce_list[i];
-         fl->buffers_added_to_freelist_function (vm, fl);
-       }
-      _vec_len (vm->buffer_announce_list) = 0;
-    }
 }
 
 void
@@ -461,33 +430,33 @@ dpdk_pool_create (vlib_main_t * vm, u8 * pool_name, u32 elt_size,
   vlib_physmem_region_t *pr;
   dpdk_mempool_private_t priv;
   clib_error_t *error = 0;
-  u32 size, obj_size;
+  size_t min_chunk_size, align;
+  u32 size;
   i32 ret;
   uword i;
 
-  obj_size = rte_mempool_calc_obj_size (elt_size, 0, 0);
 
-#if RTE_VERSION < RTE_VERSION_NUM(18, 5, 0, 0)
-  size = rte_mempool_xmem_size (num_elts, obj_size, 21, 0);
-#else
-  size = rte_mempool_calc_mem_size_helper (num_elts, obj_size, 21);
-#endif
+  mp = rte_mempool_create_empty ((char *) pool_name, num_elts, elt_size,
+                                512, pool_priv_size, numa, 0);
+  if (!mp)
+    return clib_error_return (0, "failed to create %s", pool_name);
+
+  rte_mempool_set_ops_byname (mp, RTE_MBUF_DEFAULT_MEMPOOL_OPS, NULL);
+
+  size = rte_mempool_op_calc_mem_size_default (mp, num_elts, 21,
+                                              &min_chunk_size, &align);
 
   error = vlib_physmem_region_alloc (vm, (char *) pool_name, size, numa,
                                     VLIB_PHYSMEM_F_HUGETLB |
                                     VLIB_PHYSMEM_F_SHARED, pri);
   if (error)
-    return error;
+    {
+      rte_mempool_free (mp);
+      return error;
+    }
 
   pr = vlib_physmem_get_region (vm, pri[0]);
 
-  mp = rte_mempool_create_empty ((char *) pool_name, num_elts, elt_size,
-                                512, pool_priv_size, numa, 0);
-  if (!mp)
-    return clib_error_return (0, "failed to create %s", pool_name);
-
-  rte_mempool_set_ops_byname (mp, RTE_MBUF_DEFAULT_MEMPOOL_OPS, NULL);
-
   /* Call the mempool priv initializer */
   priv.mbp_priv.mbuf_data_room_size = VLIB_BUFFER_PRE_DATA_SIZE +
     VLIB_BUFFER_DATA_SIZE;