#include <rte_regexdev.h>
#include <rte_regexdev_core.h>
#include <rte_regexdev_driver.h>
+#include <rte_dev.h>
#include <mlx5_common.h>
#include <mlx5_glue.h>
struct mlx5_regex_priv *priv = dev->data->dev_private;
struct mlx5_regex_qp *qp;
int i;
+ int nb_sq_config = 0;
int ret;
uint16_t log_desc;
qp->nb_obj * sizeof(struct mlx5_regex_sq), 64);
if (!qp->sqs) {
DRV_LOG(ERR, "Can't allocate sq array memory.");
- rte_errno = ENOMEM;
+ rte_errno = ENOMEM;
return -rte_errno;
}
log_desc = rte_log2_u32(qp->nb_desc / qp->nb_obj);
ret = regex_ctrl_create_sq(priv, qp, i, log_desc);
if (ret) {
DRV_LOG(ERR, "Can't create sq.");
- goto err_sq;
+ goto err_btree;
}
+ nb_sq_config++;
+ }
+
+ ret = mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
+ rte_socket_id());
+ if (ret) {
+ DRV_LOG(ERR, "Error setting up mr btree");
+ goto err_btree;
}
ret = mlx5_regexdev_setup_fastpath(priv, qp_ind);
if (ret) {
- DRV_LOG(ERR, "Fail to setup fastpath.");
+ DRV_LOG(ERR, "Error setting up fastpath");
goto err_fp;
}
return 0;
err_fp:
- for (i = 0; i < qp->nb_obj; i++)
- ret = regex_ctrl_destroy_sq(priv, qp, i);
-err_sq:
+ mlx5_mr_btree_free(&qp->mr_ctrl.cache_bh);
+err_btree:
+ for (i = 0; i < nb_sq_config; i++)
+ regex_ctrl_destroy_sq(priv, qp, i);
regex_ctrl_destroy_cq(priv, &qp->cq);
err_cq:
rte_free(qp->sqs);