[dpdk-dev] [PATCH v1] regex/mlx5: add teardown flow to fastpath buffers

Yuval Avnery yuvalav at nvidia.com
Thu Aug 27 08:08:36 CEST 2020


From: Yuval Avnery <yuvalav at mellanox.com>

Added missing teardown flow to fastpath buffers, and fixed
rollback code on control setup.

Signed-off-by: Yuval Avnery <yuvalav at mellanox.com>
Acked-by: Ori Kam <orika at mellanox.com>
---
 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



More information about the dev mailing list