dpdk: fix rte mempool for rx_queues
[vpp.git] / src / plugins / dpdk / buffer.c
index d691f9d..9718451 100644 (file)
@@ -20,6 +20,7 @@
 #include <rte_mbuf.h>
 #include <rte_ethdev.h>
 #include <rte_vfio.h>
+#include <rte_version.h>
 
 #include <vlib/vlib.h>
 #include <dpdk/buffer.h>
@@ -90,6 +91,7 @@ dpdk_buffer_pool_init (vlib_main_t * vm, vlib_buffer_pool_t * bp)
   rte_mempool_set_ops_byname (nmp, "vpp-no-cache", NULL);
 
   /* Call the mempool priv initializer */
+  memset (&priv, 0, sizeof (priv));
   priv.mbuf_data_room_size = VLIB_BUFFER_PRE_DATA_SIZE +
     vlib_buffer_get_default_data_size (vm);
   priv.mbuf_priv_size = VLIB_BUFFER_HDR_SIZE;
@@ -150,8 +152,12 @@ dpdk_buffer_pool_init (vlib_main_t * vm, vlib_buffer_pool_t * bp)
            pointer_to_uword (va) : pm->page_table[i];
 
          if (do_vfio_map &&
+#if RTE_VERSION < RTE_VERSION_NUM(19, 11, 0, 0)
+             rte_vfio_dma_map (pointer_to_uword (va), pa, page_sz))
+#else
              rte_vfio_container_dma_map (RTE_VFIO_DEFAULT_CONTAINER_FD,
                                          pointer_to_uword (va), pa, page_sz))
+#endif
            do_vfio_map = 0;
 
          struct rte_mempool_memhdr *memhdr;
@@ -408,7 +414,15 @@ dpdk_ops_vpp_dequeue_no_cache (struct rte_mempool *mp, void **obj_table,
 static unsigned
 dpdk_ops_vpp_get_count (const struct rte_mempool *mp)
 {
-  clib_warning ("");
+  vlib_main_t *vm = vlib_get_main ();
+  if (mp)
+    {
+      vlib_buffer_pool_t *pool = vlib_get_buffer_pool (vm, mp->pool_id);
+      if (pool)
+       {
+         return pool->n_avail;
+       }
+    }
   return 0;
 }