diff options
author | Jiri Pirko <jiri@nvidia.com> | 2023-06-02 16:51:42 +0300 |
---|---|---|
committer | Saeed Mahameed <saeedm@nvidia.com> | 2023-09-20 09:33:06 +0300 |
commit | 9497036dfbb8db1fda3915ae72f35db161f09e59 (patch) | |
tree | 0d43a0bf71d9a507385902d01caac6ee3d243da3 /drivers/net/ethernet/mellanox/mlx5/core/sf | |
parent | 2284a4836251b3dee348172f69ac84157aa7b03e (diff) | |
download | linux-9497036dfbb8db1fda3915ae72f35db161f09e59.tar.xz |
net/mlx5: Move state lock taking into mlx5_sf_dealloc()
Instead of taking lock and calling mlx5_sf_dealloc(), move the lock
taking into mlx5_sf_dealloc(). The other caller of mlx5_sf_dealloc()
does not need it now, but will need it after a follow-up patch removing
the table reference counting.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Shay Drory <shayd@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/sf')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c index 78cdfe595a01..bed3fe8759d2 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/devlink.c @@ -341,6 +341,8 @@ int mlx5_devlink_sf_port_new(struct devlink *devlink, static void mlx5_sf_dealloc(struct mlx5_sf_table *table, struct mlx5_sf *sf) { + mutex_lock(&table->sf_state_lock); + mlx5_sf_function_id_erase(table, sf); if (sf->hw_state == MLX5_VHCA_STATE_ALLOCATED) { @@ -358,6 +360,8 @@ static void mlx5_sf_dealloc(struct mlx5_sf_table *table, struct mlx5_sf *sf) mlx5_sf_hw_table_sf_deferred_free(table->dev, sf->controller, sf->id); kfree(sf); } + + mutex_unlock(&table->sf_state_lock); } int mlx5_devlink_sf_port_del(struct devlink *devlink, @@ -377,10 +381,7 @@ int mlx5_devlink_sf_port_del(struct devlink *devlink, } mlx5_eswitch_unload_sf_vport(esw, sf->hw_fn_id); - - mutex_lock(&table->sf_state_lock); mlx5_sf_dealloc(table, sf); - mutex_unlock(&table->sf_state_lock); mlx5_sf_table_put(table); return 0; } |