#include <vnet/ethernet/ethernet.h>
#include <vnet/ipsec/ipsec.h>
+#include <dpdk/buffer.h>
#include <dpdk/device/dpdk.h>
#include <dpdk/device/dpdk_priv.h>
#include <dpdk/ipsec/ipsec.h>
static_always_inline u32
dpdk_crypto_dequeue (vlib_main_t * vm, vlib_node_runtime_t * node,
- crypto_resource_t * res, u8 outbound)
+ crypto_resource_t * res)
{
u32 thread_idx = vlib_get_thread_index ();
u8 numa = rte_socket_id ();
ops = cwm->ops;
n_ops = n_deq = rte_cryptodev_dequeue_burst (res->dev_id,
- res->qp_id + outbound,
+ res->qp_id,
ops, VLIB_FRAME_SIZE);
- res->inflights[outbound] -= n_ops;
+ /* no op dequeued, do not proceed */
+ if (n_deq == 0)
+ return 0;
+
+ res->inflights -= n_ops;
dpdk_crypto_input_trace (vm, node, ops, n_deq);
CLIB_PREFETCH (ops[6], CLIB_CACHE_LINE_BYTES, LOAD);
CLIB_PREFETCH (ops[7], CLIB_CACHE_LINE_BYTES, LOAD);
- CLIB_PREFETCH (crypto_op_get_priv (ops[4]), CLIB_CACHE_LINE_BYTES,
- LOAD);
- CLIB_PREFETCH (crypto_op_get_priv (ops[5]), CLIB_CACHE_LINE_BYTES,
- LOAD);
- CLIB_PREFETCH (crypto_op_get_priv (ops[6]), CLIB_CACHE_LINE_BYTES,
- LOAD);
- CLIB_PREFETCH (crypto_op_get_priv (ops[7]), CLIB_CACHE_LINE_BYTES,
- LOAD);
+ CLIB_PREFETCH (crypto_op_get_priv (ops[4]),
+ CLIB_CACHE_LINE_BYTES, LOAD);
+ CLIB_PREFETCH (crypto_op_get_priv (ops[5]),
+ CLIB_CACHE_LINE_BYTES, LOAD);
+ CLIB_PREFETCH (crypto_op_get_priv (ops[6]),
+ CLIB_CACHE_LINE_BYTES, LOAD);
+ CLIB_PREFETCH (crypto_op_get_priv (ops[7]),
+ CLIB_CACHE_LINE_BYTES, LOAD);
}
op0 = ops[0];
{
res = vec_elt_at_index (dcm->resource, res_idx[0]);
- if (res->inflights[0])
- n_deq += dpdk_crypto_dequeue (vm, node, res, 0);
-
- if (res->inflights[1])
- n_deq += dpdk_crypto_dequeue (vm, node, res, 1);
+ if (res->inflights)
+ n_deq += dpdk_crypto_dequeue (vm, node, res);
- if (PREDICT_FALSE (res->remove && !(res->inflights[0] || res->inflights[1])))
+ if (PREDICT_FALSE (res->remove && !(res->inflights)))
vec_add1 (remove, res_idx[0]);
}
/* *INDENT-ON* */