((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();
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);
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);
+ }
+}