In case of crypto event vector, the vector points to crypto op structure
in priv area and not actual mbuf.
Extract the mbuf pointer and pass these to rte_mbuf_free to free the
mbufs.

Signed-off-by: Vidya Sagar Velumuri <vvelum...@marvell.com>

diff --git a/examples/ipsec-secgw/ipsec_worker.c 
b/examples/ipsec-secgw/ipsec_worker.c
index c9c43ebd2b..dd14226e81 100644
--- a/examples/ipsec-secgw/ipsec_worker.c
+++ b/examples/ipsec-secgw/ipsec_worker.c
@@ -960,7 +960,18 @@ static void
 ipsec_event_vector_free(struct rte_event *ev)
 {
        struct rte_event_vector *vec = ev->vec;
-       rte_pktmbuf_free_bulk(vec->mbufs + vec->elem_offset, vec->nb_elem);
+
+       if (ev->event_type == RTE_EVENT_TYPE_CRYPTODEV_VECTOR) {
+               struct rte_crypto_op *cop;
+               int i;
+
+               for (i = 0; i < vec->nb_elem; i++) {
+                       cop = vec->ptrs[i];
+                       rte_pktmbuf_free(cop->sym->m_src);
+               }
+       } else {
+               rte_pktmbuf_free_bulk(vec->mbufs + vec->elem_offset, 
vec->nb_elem);
+       }
        rte_mempool_put(rte_mempool_from_obj(vec), vec);
 }
 
-- 
2.25.1

Reply via email to