net/mlx5: fix DevX resources freeing
Invalid memory release order of DevX resources caused PMD crash. 1. SQ and CQ memory must be unregistered with DevX before it is freed. 2. SQ objects reference to a CQ ones. Hence, SQ should be destroyed in advance of CQ it references to. Fixes:6deb19e1b2
("net/mlx5: separate Rx queue object creations") Fixes:88f2e3f18c
("net/mlx5: rearrange SQ and CQ creation in DevX module") Signed-off-by: Gregory Etelson <getelson@nvidia.com> Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com> Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
parent
38d5ea9094
commit
6e09c7bb6f
@ -154,14 +154,14 @@ mlx5_rxq_release_devx_rq_resources(struct mlx5_rxq_ctrl *rxq_ctrl)
|
||||
{
|
||||
struct mlx5_devx_dbr_page *dbr_page = rxq_ctrl->rq_dbrec_page;
|
||||
|
||||
if (rxq_ctrl->rxq.wqes) {
|
||||
mlx5_free((void *)(uintptr_t)rxq_ctrl->rxq.wqes);
|
||||
rxq_ctrl->rxq.wqes = NULL;
|
||||
}
|
||||
if (rxq_ctrl->wq_umem) {
|
||||
mlx5_glue->devx_umem_dereg(rxq_ctrl->wq_umem);
|
||||
rxq_ctrl->wq_umem = NULL;
|
||||
}
|
||||
if (rxq_ctrl->rxq.wqes) {
|
||||
mlx5_free((void *)(uintptr_t)rxq_ctrl->rxq.wqes);
|
||||
rxq_ctrl->rxq.wqes = NULL;
|
||||
}
|
||||
if (dbr_page) {
|
||||
claim_zero(mlx5_release_dbr(&rxq_ctrl->priv->dbrpgs,
|
||||
mlx5_os_get_umem_id(dbr_page->umem),
|
||||
@ -181,14 +181,14 @@ mlx5_rxq_release_devx_cq_resources(struct mlx5_rxq_ctrl *rxq_ctrl)
|
||||
{
|
||||
struct mlx5_devx_dbr_page *dbr_page = rxq_ctrl->cq_dbrec_page;
|
||||
|
||||
if (rxq_ctrl->rxq.cqes) {
|
||||
rte_free((void *)(uintptr_t)rxq_ctrl->rxq.cqes);
|
||||
rxq_ctrl->rxq.cqes = NULL;
|
||||
}
|
||||
if (rxq_ctrl->cq_umem) {
|
||||
mlx5_glue->devx_umem_dereg(rxq_ctrl->cq_umem);
|
||||
rxq_ctrl->cq_umem = NULL;
|
||||
}
|
||||
if (rxq_ctrl->rxq.cqes) {
|
||||
rte_free((void *)(uintptr_t)rxq_ctrl->rxq.cqes);
|
||||
rxq_ctrl->rxq.cqes = NULL;
|
||||
}
|
||||
if (dbr_page) {
|
||||
claim_zero(mlx5_release_dbr(&rxq_ctrl->priv->dbrpgs,
|
||||
mlx5_os_get_umem_id(dbr_page->umem),
|
||||
@ -1174,8 +1174,8 @@ mlx5_txq_release_devx_cq_resources(struct mlx5_txq_obj *txq_obj)
|
||||
static void
|
||||
mlx5_txq_release_devx_resources(struct mlx5_txq_obj *txq_obj)
|
||||
{
|
||||
mlx5_txq_release_devx_cq_resources(txq_obj);
|
||||
mlx5_txq_release_devx_sq_resources(txq_obj);
|
||||
mlx5_txq_release_devx_cq_resources(txq_obj);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user