mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
net/mlx5: DR, Handle domain memory resources init/uninit separately
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>
This commit is contained in:
parent
06ab4a4089
commit
183a6706a0
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user