#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 void
-dpdk_crypto_check_check_op (vlib_main_t * vm, vlib_node_runtime_t * node,
+dpdk_crypto_input_check_op (vlib_main_t * vm, vlib_node_runtime_t * node,
struct rte_crypto_op *op0, u16 * next)
{
if (PREDICT_FALSE (op0->status != RTE_CRYPTO_OP_STATUS_SUCCESS))
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];
next[2] = crypto_op_get_priv (op2)->next;
next[3] = crypto_op_get_priv (op3)->next;
- dpdk_crypto_check_check_op (vm, node, op0, next + 0);
- dpdk_crypto_check_check_op (vm, node, op0, next + 1);
- dpdk_crypto_check_check_op (vm, node, op0, next + 2);
- dpdk_crypto_check_check_op (vm, node, op0, next + 3);
+ dpdk_crypto_input_check_op (vm, node, op0, next + 0);
+ dpdk_crypto_input_check_op (vm, node, op1, next + 1);
+ dpdk_crypto_input_check_op (vm, node, op2, next + 2);
+ dpdk_crypto_input_check_op (vm, node, op3, next + 3);
b0 = vlib_buffer_from_rte_mbuf (op0->sym[0].m_src);
b1 = vlib_buffer_from_rte_mbuf (op1->sym[0].m_src);
next[0] = crypto_op_get_priv (op0)->next;
- dpdk_crypto_check_check_op (vm, node, op0, next + 0);
+ dpdk_crypto_input_check_op (vm, node, op0, next + 0);
/* XXX store bi0 and next0 in op0 private? */
b0 = vlib_buffer_from_rte_mbuf (op0->sym[0].m_src);
{
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* */