]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: fix ASO CT object release
authorMichael Baum <michaelba@nvidia.com>
Mon, 14 Feb 2022 09:34:54 +0000 (11:34 +0200)
committerRaslan Darawsheh <rasland@nvidia.com>
Mon, 21 Feb 2022 10:36:39 +0000 (11:36 +0100)
The ASO connection tracking structure is initialized once for sharing
device context.

Its release takes place in the close function which is called for each
ethdev individually. i.e. when there is more than one ethdev under the
same sharing device context, it will be destroyed when one of them is
closed. If the other wants to use it later, it may cause it to crash.

In addition, the creation of this structure is performed in the spawn
function. If one of the creations of the objects following it fails, it
is supposed to be destroyed but this does not happen.

This patch moves its release to the sharing device context free function
and thus solves both problems.

Fixes: 0af8a2298a42 ("net/mlx5: release connection tracking management")
Fixes: ee9e5fad03eb ("net/mlx5: initialize connection tracking management")
Cc: stable@dpdk.org
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5.c

index 5571e9067787c62c109ea46a649784aeb22383f8..cde8d022cd11bb197773a11a5c5e360322da04e8 100644 (file)
@@ -1321,6 +1321,8 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh)
         *  Only primary process handles async device events.
         **/
        mlx5_flow_counters_mng_close(sh);
+       if (sh->ct_mng)
+               mlx5_flow_aso_ct_mng_close(sh);
        if (sh->aso_age_mng) {
                mlx5_flow_aso_age_mng_close(sh);
                sh->aso_age_mng = NULL;
@@ -1594,8 +1596,6 @@ mlx5_dev_close(struct rte_eth_dev *dev)
        if (priv->mreg_cp_tbl)
                mlx5_hlist_destroy(priv->mreg_cp_tbl);
        mlx5_mprq_free_mp(dev);
-       if (priv->sh->ct_mng)
-               mlx5_flow_aso_ct_mng_close(priv->sh);
        mlx5_os_free_shared_dr(priv);
        if (priv->rss_conf.rss_key != NULL)
                mlx5_free(priv->rss_conf.rss_key);