net/sfc: use own logging helper macros
[dpdk.git] / drivers / regex / mlx5 / mlx5_regex_fastpath.c
index 2c6c9e1..d9b2a1a 100644 (file)
@@ -135,7 +135,7 @@ send_doorbell(struct mlx5dv_devx_uar *uar, struct mlx5_regex_sq *sq)
        ((struct mlx5_wqe_ctrl_seg *)wqe)->fm_ce_se = MLX5_WQE_CTRL_CQ_UPDATE;
        uint64_t *doorbell_addr =
                (uint64_t *)((uint8_t *)uar->base_addr + 0x800);
-       rte_cio_wmb();
+       rte_io_wmb();
        sq->dbr[MLX5_SND_DBR] = rte_cpu_to_be_32((sq->db_pi + 1) &
                                                 MLX5_REGEX_MAX_WQE_INDEX);
        rte_wmb();
@@ -219,7 +219,7 @@ poll_one(struct mlx5_regex_cq *cq)
 
        next_cqe_offset =  (cq->ci & (cq_size_get(cq) - 1));
        cqe = (volatile struct mlx5_cqe *)(cq->cqe + next_cqe_offset);
-       rte_cio_wmb();
+       rte_io_wmb();
 
        int ret = check_cqe(cqe, cq_size_get(cq), cq->ci);
 
@@ -407,8 +407,39 @@ mlx5_regexdev_setup_fastpath(struct mlx5_regex_priv *priv, uint32_t qp_id)
        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);
+       }
+}