Use the right API for session freeing. Sessions can be asymmetric,
symmetric or security.

Fixes: 28dde5da503e ("app/crypto-perf: support lookaside IPsec")
Fixes: a538d1d2d01e ("test/crypto-perf: extend asymmetric crypto throughput 
test")

Signed-off-by: Anoob Joseph <ano...@marvell.com>
---
 app/test-crypto-perf/cperf_test_latency.c | 27 +++++++++++++++++------
 app/test-crypto-perf/cperf_test_verify.c  | 25 ++++++++++++++++-----
 2 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/app/test-crypto-perf/cperf_test_latency.c 
b/app/test-crypto-perf/cperf_test_latency.c
index 49bf421c01..406e082e4e 100644
--- a/app/test-crypto-perf/cperf_test_latency.c
+++ b/app/test-crypto-perf/cperf_test_latency.c
@@ -43,15 +43,28 @@ struct priv_op_data {
 static void
 cperf_latency_test_free(struct cperf_latency_ctx *ctx)
 {
-       if (ctx) {
-               if (ctx->sess)
-                       rte_cryptodev_sym_session_free(ctx->dev_id, ctx->sess);
-
-               rte_mempool_free(ctx->pool);
+       if (ctx == NULL)
+               return;
 
-               rte_free(ctx->res);
-               rte_free(ctx);
+       if (ctx->sess != NULL) {
+               if (ctx->options->op_type == CPERF_ASYM_MODEX)
+                       rte_cryptodev_asym_session_free(ctx->dev_id, ctx->sess);
+#ifdef RTE_LIB_SECURITY
+               else if (ctx->options->op_type == CPERF_PDCP ||
+                        ctx->options->op_type == CPERF_DOCSIS ||
+                        ctx->options->op_type == CPERF_IPSEC) {
+                       struct rte_security_ctx *sec_ctx =
+                               rte_cryptodev_get_sec_ctx(ctx->dev_id);
+                       rte_security_session_destroy(sec_ctx, ctx->sess);
+               }
+#endif
+               else
+                       rte_cryptodev_sym_session_free(ctx->dev_id, ctx->sess);
        }
+
+       rte_mempool_free(ctx->pool);
+       rte_free(ctx->res);
+       rte_free(ctx);
 }
 
 void *
diff --git a/app/test-crypto-perf/cperf_test_verify.c 
b/app/test-crypto-perf/cperf_test_verify.c
index c03e1d5ba5..8042c94e04 100644
--- a/app/test-crypto-perf/cperf_test_verify.c
+++ b/app/test-crypto-perf/cperf_test_verify.c
@@ -38,14 +38,27 @@ struct cperf_op_result {
 static void
 cperf_verify_test_free(struct cperf_verify_ctx *ctx)
 {
-       if (ctx) {
-               if (ctx->sess)
-                       rte_cryptodev_sym_session_free(ctx->dev_id, ctx->sess);
-
-               rte_mempool_free(ctx->pool);
+       if (ctx == NULL)
+               return;
 
-               rte_free(ctx);
+       if (ctx->sess != NULL) {
+               if (ctx->options->op_type == CPERF_ASYM_MODEX)
+                       rte_cryptodev_asym_session_free(ctx->dev_id, ctx->sess);
+#ifdef RTE_LIB_SECURITY
+               else if (ctx->options->op_type == CPERF_PDCP ||
+                        ctx->options->op_type == CPERF_DOCSIS ||
+                        ctx->options->op_type == CPERF_IPSEC) {
+                       struct rte_security_ctx *sec_ctx =
+                               rte_cryptodev_get_sec_ctx(ctx->dev_id);
+                       rte_security_session_destroy(sec_ctx, ctx->sess);
+               }
+#endif
+               else
+                       rte_cryptodev_sym_session_free(ctx->dev_id, ctx->sess);
        }
+
+       rte_mempool_free(ctx->pool);
+       rte_free(ctx);
 }
 
 void *
-- 
2.25.1

Reply via email to