dpdk-ipsec: use single queue pair per crypto resource
[vpp.git] / src / plugins / dpdk / ipsec / ipsec.c
index ade454f..5207084 100644 (file)
 #include <vlib/node_funcs.h>
 
 #include <dpdk/device/dpdk.h>
+#include <dpdk/buffer.h>
 #include <dpdk/ipsec/ipsec.h>
 
 dpdk_crypto_main_t dpdk_crypto_main;
 
 #define EMPTY_STRUCT {0}
+#define NUM_CRYPTO_MBUFS 16384
 
 static void
 algos_init (u32 n_mains)
@@ -704,7 +706,7 @@ crypto_scan_devs (u32 n_mains)
          continue;
        }
 
-      max_res_idx = (dev->max_qp / 2) - 1;
+      max_res_idx = dev->max_qp - 1;
 
       vec_validate (dev->free_resources, max_res_idx);
 
@@ -713,13 +715,13 @@ crypto_scan_devs (u32 n_mains)
                                       (crypto_resource_t) EMPTY_STRUCT,
                                       CLIB_CACHE_LINE_BYTES);
 
-      for (j = 0; j <= max_res_idx; j++, res_idx++)
+      for (j = 0; j <= max_res_idx; j++)
        {
-         vec_elt (dev->free_resources, max_res_idx - j) = res_idx;
-         res = &dcm->resource[res_idx];
+         vec_elt (dev->free_resources, max_res_idx - j) = res_idx + j;
+         res = &dcm->resource[res_idx + j];
          res->dev_id = i;
          res->drv_id = drv_id;
-         res->qp_id = j * 2;
+         res->qp_id = j;
          res->numa = dev->numa;
          res->thread_idx = (u16) ~ 0;
        }
@@ -835,11 +837,12 @@ crypto_create_crypto_op_pool (vlib_main_t * vm, u8 numa)
 
   pool_name = format (0, "crypto_pool_numa%u%c", numa, 0);
 
-  mp =
-    rte_mempool_create ((char *) pool_name,
-                       conf->num_mbufs,
-                       crypto_op_len (), 512, pool_priv_size, NULL, NULL,
-                       crypto_op_init, NULL, numa, 0);
+  if (conf->num_crypto_mbufs == 0)
+    conf->num_crypto_mbufs = NUM_CRYPTO_MBUFS;
+
+  mp = rte_mempool_create ((char *) pool_name, conf->num_crypto_mbufs,
+                          crypto_op_len (), 512, pool_priv_size, NULL, NULL,
+                          crypto_op_init, NULL, numa, 0);
 
   vec_free (pool_name);