summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
diff options
context:
space:
mode:
authorShay Drory <shayd@nvidia.com>2023-10-12 12:27:40 -0700
committerSaeed Mahameed <saeedm@nvidia.com>2023-10-14 10:16:31 -0700
commitb430c1b4f63be51dde175a1dd3addba65ca24e2b (patch)
treed0426edc7e49d6ecbe54efb8e03e217025571e53 /drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
parente534552c92a44690e48593f9567fe689545ded73 (diff)
downloadlinux-stable-b430c1b4f63be51dde175a1dd3addba65ca24e2b.tar.gz
linux-stable-b430c1b4f63be51dde175a1dd3addba65ca24e2b.tar.bz2
linux-stable-b430c1b4f63be51dde175a1dd3addba65ca24e2b.zip
net/mlx5: Replace global mlx5_intf_lock with HCA devcom component lock
mlx5_intf_lock is used to sync between LAG changes and its slaves mlx5 core dev aux devices changes, which means every time mlx5 core dev add/remove aux devices, mlx5 is taking this global lock, even if LAG functionality isn't supported over the core dev. This cause a bottleneck when probing VFs/SFs in parallel. Hence, replace mlx5_intf_lock with HCA devcom component lock, or no lock if LAG functionality isn't supported. Signed-off-by: Shay Drory <shayd@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
index f4d5c300ddd6..e8e50563e956 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
@@ -401,3 +401,10 @@ void mlx5_devcom_comp_unlock(struct mlx5_devcom_comp_dev *devcom)
return;
up_write(&devcom->comp->sem);
}
+
+int mlx5_devcom_comp_trylock(struct mlx5_devcom_comp_dev *devcom)
+{
+ if (IS_ERR_OR_NULL(devcom))
+ return 0;
+ return down_write_trylock(&devcom->comp->sem);
+}