Skip to content

Commit 80a2a90

Browse files
Yuval AvnerySaeed Mahameed
authored andcommitted
net/mlx5e: Add a lock on tir list
Refresh tirs is looping over a global list of tirs while netdevs are adding and removing tirs from that list. That is why a lock is required. Fixes: 724b2aa ("net/mlx5e: TIRs management refactoring") Signed-off-by: Yuval Avnery <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 8e94936 commit 80a2a90

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_common.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,20 @@ int mlx5e_create_tir(struct mlx5_core_dev *mdev,
4545
if (err)
4646
return err;
4747

48+
mutex_lock(&mdev->mlx5e_res.td.list_lock);
4849
list_add(&tir->list, &mdev->mlx5e_res.td.tirs_list);
50+
mutex_unlock(&mdev->mlx5e_res.td.list_lock);
4951

5052
return 0;
5153
}
5254

5355
void mlx5e_destroy_tir(struct mlx5_core_dev *mdev,
5456
struct mlx5e_tir *tir)
5557
{
58+
mutex_lock(&mdev->mlx5e_res.td.list_lock);
5659
mlx5_core_destroy_tir(mdev, tir->tirn);
5760
list_del(&tir->list);
61+
mutex_unlock(&mdev->mlx5e_res.td.list_lock);
5862
}
5963

6064
static int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn,
@@ -114,6 +118,7 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)
114118
}
115119

116120
INIT_LIST_HEAD(&mdev->mlx5e_res.td.tirs_list);
121+
mutex_init(&mdev->mlx5e_res.td.list_lock);
117122

118123
return 0;
119124

@@ -159,6 +164,7 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb)
159164

160165
MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);
161166

167+
mutex_lock(&mdev->mlx5e_res.td.list_lock);
162168
list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {
163169
tirn = tir->tirn;
164170
err = mlx5_core_modify_tir(mdev, tirn, in, inlen);
@@ -170,6 +176,7 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb)
170176
kvfree(in);
171177
if (err)
172178
netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);
179+
mutex_unlock(&mdev->mlx5e_res.td.list_lock);
173180

174181
return err;
175182
}

include/linux/mlx5/driver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,8 @@ enum mlx5_pagefault_type_flags {
594594
};
595595

596596
struct mlx5_td {
597+
/* protects tirs list changes while tirs refresh */
598+
struct mutex list_lock;
597599
struct list_head tirs_list;
598600
u32 tdn;
599601
};

0 commit comments

Comments
 (0)