From e621d970006787e28e0f9d9593a9f48a71071d3d Mon Sep 17 00:00:00 2001 From: Akhil Goyal Date: Wed, 27 Mar 2019 11:53:36 +0000 Subject: [PATCH] crypto/dpaa_sec: fix session queue attach/detach session inq and qp are assigned for each core from which the packets arrive. This was not correctly handled while supporting multiple sessions per queue pair. This patch fixes the attach and detach of queues for each core. Fixes: e79416d10fa3 ("crypto/dpaa_sec: support multiple sessions per queue pair") Cc: stable@dpdk.org Signed-off-by: Akhil Goyal --- drivers/crypto/dpaa_sec/dpaa_sec.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index cb99be4e13..8305f19a31 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2017-2018 NXP + * Copyright 2017-2019 NXP * */ @@ -1940,13 +1940,13 @@ dpaa_sec_attach_rxq(struct dpaa_sec_dev_private *qi) { unsigned int i; - for (i = 0; i < qi->max_nb_sessions; i++) { + for (i = 0; i < qi->max_nb_sessions * MAX_DPAA_CORES; i++) { if (qi->inq_attach[i] == 0) { qi->inq_attach[i] = 1; return &qi->inq[i]; } } - DPAA_SEC_WARN("All ses session in use %x", qi->max_nb_sessions); + DPAA_SEC_WARN("All session in use %u", qi->max_nb_sessions); return NULL; } @@ -2115,7 +2115,7 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, struct rte_cryptodev_sym_session *sess) { struct dpaa_sec_dev_private *qi = dev->data->dev_private; - uint8_t index = dev->driver_id; + uint8_t index = dev->driver_id, i; void *sess_priv = get_sym_session_private_data(sess, index); PMD_INIT_FUNC_TRACE(); @@ -2125,9 +2125,12 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, if (sess_priv) { struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); - if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) - dpaa_sec_detach_rxq(qi, - s->inq[rte_lcore_id() % MAX_DPAA_CORES]); + for (i = 0; i < MAX_DPAA_CORES; i++) { + if (s->inq[i]) + dpaa_sec_detach_rxq(qi, s->inq[i]); + s->inq[i] = NULL; + s->qp[i] = NULL; + } rte_free(s->cipher_key.data); rte_free(s->auth_key.data); memset(s, 0, sizeof(dpaa_sec_session)); -- 2.20.1