Message ID | 20201124081013.1912-1-getelson@nvidia.com |
---|---|
State | Accepted, archived |
Delegated to: | Thomas Monjalon |
Headers | show |
Series |
|
Related | show |
Context | Check | Description |
---|---|---|
ci/travis-robot | success | Travis build: passed |
ci/iol-mellanox-Performance | success | Performance Testing PASS |
ci/Intel-compilation | success | Compilation OK |
ci/iol-testing | success | Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-intel-Functional | success | Functional Testing PASS |
ci/iol-broadcom-Functional | success | Functional Testing PASS |
ci/iol-broadcom-Performance | success | Performance Testing PASS |
ci/checkpatch | success | coding style OK |
From: Gregory Etelson > 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: 6deb19e1b2d2 ("net/mlx5: separate Rx queue object creations") > Fixes: 88f2e3f18cc7 ("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>
> > 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: 6deb19e1b2d2 ("net/mlx5: separate Rx queue object creations") > > Fixes: 88f2e3f18cc7 ("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> Applied, thanks
diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index 73ee147246..de9b204075 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -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); } /**