]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: DR, Handle domain memory resources init/uninit separately
authorYevgeny Kliteynik <kliteyn@nvidia.com>
Tue, 28 Jun 2022 11:32:37 +0000 (14:32 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Oct 2022 14:50:38 +0000 (15:50 +0100)
Handle creation/destruction of all the domain's memory pools and other
memory-related fields in a separate init/uninit functions.
This simplifies error flow and allows cleaner addition of new pools.

Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: Alex Vesker <valex@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c

index fc6ae49b5ecce46eca0fa2317d184374a8f0735d..543d655ae3b684cbcba8b908f88b365cbb98f0da 100644 (file)
@@ -56,6 +56,36 @@ int mlx5dr_domain_get_recalc_cs_ft_addr(struct mlx5dr_domain *dmn,
        return 0;
 }
 
+static int dr_domain_init_mem_resources(struct mlx5dr_domain *dmn)
+{
+       int ret;
+
+       dmn->ste_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_STE);
+       if (!dmn->ste_icm_pool) {
+               mlx5dr_err(dmn, "Couldn't get icm memory\n");
+               return -ENOMEM;
+       }
+
+       dmn->action_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_MODIFY_ACTION);
+       if (!dmn->action_icm_pool) {
+               mlx5dr_err(dmn, "Couldn't get action icm memory\n");
+               ret = -ENOMEM;
+               goto free_ste_icm_pool;
+       }
+
+       return 0;
+
+free_ste_icm_pool:
+       mlx5dr_icm_pool_destroy(dmn->ste_icm_pool);
+       return ret;
+}
+
+static void dr_domain_uninit_mem_resources(struct mlx5dr_domain *dmn)
+{
+       mlx5dr_icm_pool_destroy(dmn->action_icm_pool);
+       mlx5dr_icm_pool_destroy(dmn->ste_icm_pool);
+}
+
 static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 {
        int ret;
@@ -79,32 +109,22 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
                goto clean_pd;
        }
 
-       dmn->ste_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_STE);
-       if (!dmn->ste_icm_pool) {
-               mlx5dr_err(dmn, "Couldn't get icm memory\n");
-               ret = -ENOMEM;
+       ret = dr_domain_init_mem_resources(dmn);
+       if (ret) {
+               mlx5dr_err(dmn, "Couldn't create domain memory resources\n");
                goto clean_uar;
        }
 
-       dmn->action_icm_pool = mlx5dr_icm_pool_create(dmn, DR_ICM_TYPE_MODIFY_ACTION);
-       if (!dmn->action_icm_pool) {
-               mlx5dr_err(dmn, "Couldn't get action icm memory\n");
-               ret = -ENOMEM;
-               goto free_ste_icm_pool;
-       }
-
        ret = mlx5dr_send_ring_alloc(dmn);
        if (ret) {
                mlx5dr_err(dmn, "Couldn't create send-ring\n");
-               goto free_action_icm_pool;
+               goto clean_mem_resources;
        }
 
        return 0;
 
-free_action_icm_pool:
-       mlx5dr_icm_pool_destroy(dmn->action_icm_pool);
-free_ste_icm_pool:
-       mlx5dr_icm_pool_destroy(dmn->ste_icm_pool);
+clean_mem_resources:
+       dr_domain_uninit_mem_resources(dmn);
 clean_uar:
        mlx5_put_uars_page(dmn->mdev, dmn->uar);
 clean_pd:
@@ -116,8 +136,7 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn)
 static void dr_domain_uninit_resources(struct mlx5dr_domain *dmn)
 {
        mlx5dr_send_ring_free(dmn, dmn->send_ring);
-       mlx5dr_icm_pool_destroy(dmn->action_icm_pool);
-       mlx5dr_icm_pool_destroy(dmn->ste_icm_pool);
+       dr_domain_uninit_mem_resources(dmn);
        mlx5_put_uars_page(dmn->mdev, dmn->uar);
        mlx5_core_dealloc_pd(dmn->mdev, dmn->pdn);
 }