From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 39888A04B1; Thu, 27 Aug 2020 08:08:43 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8E4E01BC24; Thu, 27 Aug 2020 08:08:41 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 604FB2B9E for ; Thu, 27 Aug 2020 08:08:40 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from yuvalav@mellanox.com) with SMTP; 27 Aug 2020 09:08:39 +0300 Received: from pegasus04.mtr.labs.mlnx (pegasus04.mtr.labs.mlnx [10.210.16.126]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 07R68dC8010615; Thu, 27 Aug 2020 09:08:39 +0300 Received: from pegasus04.mtr.labs.mlnx (localhost [127.0.0.1]) by pegasus04.mtr.labs.mlnx (8.14.7/8.14.7) with ESMTP id 07R68ds5072268; Thu, 27 Aug 2020 06:08:39 GMT Received: (from yuvalav@localhost) by pegasus04.mtr.labs.mlnx (8.14.7/8.14.7/Submit) id 07R68cFO072266; Thu, 27 Aug 2020 06:08:38 GMT From: Yuval Avnery To: Ori Kam Cc: thomas@monjalon.net, dev@dpdk.org, yuvalav@mellanox.com Date: Thu, 27 Aug 2020 06:08:36 +0000 Message-Id: <1598508516-72177-1-git-send-email-yuvalav@nvidia.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-dev] [PATCH v1] regex/mlx5: add teardown flow to fastpath buffers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Yuval Avnery Added missing teardown flow to fastpath buffers, and fixed rollback code on control setup. Signed-off-by: Yuval Avnery Acked-by: Ori Kam --- drivers/regex/mlx5/mlx5_regex.h | 1 + drivers/regex/mlx5/mlx5_regex_control.c | 20 ++++++++++++------- drivers/regex/mlx5/mlx5_regex_fastpath.c | 33 +++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/drivers/regex/mlx5/mlx5_regex.h b/drivers/regex/mlx5/mlx5_regex.h index 6098fb1..e1cdf80 100644 --- a/drivers/regex/mlx5/mlx5_regex.h +++ b/drivers/regex/mlx5/mlx5_regex.h @@ -109,6 +109,7 @@ int mlx5_regex_qp_setup(struct rte_regexdev *dev, uint16_t qp_ind, /* mlx5_regex_fastpath.c */ int mlx5_regexdev_setup_fastpath(struct mlx5_regex_priv *priv, uint32_t qp_id); +void mlx5_regexdev_teardown_fastpath(struct mlx5_regex_priv *priv, uint32_t qp_id); uint16_t mlx5_regexdev_enqueue(struct rte_regexdev *dev, uint16_t qp_id, struct rte_regex_ops **ops, uint16_t nb_ops); uint16_t mlx5_regexdev_dequeue(struct rte_regexdev *dev, uint16_t qp_id, diff --git a/drivers/regex/mlx5/mlx5_regex_control.c b/drivers/regex/mlx5/mlx5_regex_control.c index faafb76..187c3de 100644 --- a/drivers/regex/mlx5/mlx5_regex_control.c +++ b/drivers/regex/mlx5/mlx5_regex_control.c @@ -357,23 +357,29 @@ ret = regex_ctrl_create_cq(priv, &qp->cq); if (ret) { DRV_LOG(ERR, "Can't create cq."); - goto error; + goto err_cq; } for (i = 0; i < qp->nb_obj; i++) { ret = regex_ctrl_create_sq(priv, qp, i, log_desc); if (ret) { DRV_LOG(ERR, "Can't create sq."); - goto error; + goto err_sq; } } - mlx5_regexdev_setup_fastpath(priv, qp_ind); + ret = mlx5_regexdev_setup_fastpath(priv, qp_ind); + if (ret) { + DRV_LOG(ERR, "Fail to setup fastpath."); + goto err_fp; + } return 0; -error: - regex_ctrl_destroy_cq(priv, &qp->cq); +err_fp: for (i = 0; i < qp->nb_obj; i++) ret = regex_ctrl_destroy_sq(priv, qp, i); - return -rte_errno; - +err_sq: + regex_ctrl_destroy_cq(priv, &qp->cq); +err_cq: + rte_free(qp->sqs); + return ret; } diff --git a/drivers/regex/mlx5/mlx5_regex_fastpath.c b/drivers/regex/mlx5/mlx5_regex_fastpath.c index 2c6c9e1..6fafcff 100644 --- a/drivers/regex/mlx5/mlx5_regex_fastpath.c +++ b/drivers/regex/mlx5/mlx5_regex_fastpath.c @@ -407,8 +407,39 @@ struct mlx5_regex_job { if (!qp->jobs) return -ENOMEM; err = setup_buffers(qp, priv->pd); - if (err) + if (err) { + rte_free(qp->jobs); return err; + } setup_sqs(qp); return 0; } + +static void +free_buffers(struct mlx5_regex_qp *qp) +{ + if (qp->metadata) { + mlx5_glue->dereg_mr(qp->metadata); + rte_free(qp->metadata->addr); + } + if (qp->inputs) { + mlx5_glue->dereg_mr(qp->inputs); + rte_free(qp->inputs->addr); + } + if (qp->outputs) { + mlx5_glue->dereg_mr(qp->outputs); + rte_free(qp->outputs->addr); + } +} + +void +mlx5_regexdev_teardown_fastpath(struct mlx5_regex_priv *priv, uint32_t qp_id) +{ + struct mlx5_regex_qp *qp = &priv->qps[qp_id]; + + if (qp) { + free_buffers(qp); + if (qp->jobs) + rte_free(qp->jobs); + } +} -- 1.8.3.1