Skip to content

Commit 25461ce

Browse files
author
Saeed Mahameed
committed
net/mlx5e: Use the correct lag ports number when creating TISes
The cited commit moved the code of mlx5e_create_tises() and changed the loop to create TISes over MLX5_MAX_PORTS constant value, instead of getting the correct lag ports supported by the device, which can cause FW errors on devices with less than MLX5_MAX_PORTS ports. Change that back to mlx5e_get_num_lag_ports(mdev). Also IPoIB interfaces create there own TISes, they don't use the eth TISes, pass a flag to indicate that. This fixes the following errors that might appear in kernel log: mlx5_cmd_out_err:808:(pid 650): CREATE_TIS(0x912) op_mod(0x0) failed, status bad parameter(0x3), syndrome (0x595b5d), err(-22) mlx5e_create_mdev_resources:174:(pid 650): alloc tises failed, -22 Fixes: b25bd37 ("net/mlx5: Move TISes from priv to mdev HW resources") Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
1 parent 32f2a0a commit 25461ce

File tree

5 files changed

+17
-11
lines changed

5 files changed

+17
-11
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,7 @@ static inline bool mlx5_tx_swp_supported(struct mlx5_core_dev *mdev)
11241124
extern const struct ethtool_ops mlx5e_ethtool_ops;
11251125

11261126
int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn, u32 *mkey);
1127-
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev);
1127+
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises);
11281128
void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev);
11291129
int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb,
11301130
bool enable_mc_lb);

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

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static void mlx5e_destroy_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PO
9595
{
9696
int tc, i;
9797

98-
for (i = 0; i < MLX5_MAX_PORTS; i++)
98+
for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++)
9999
for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++)
100100
mlx5e_destroy_tis(mdev, tisn[i][tc]);
101101
}
@@ -110,7 +110,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT
110110
int tc, i;
111111
int err;
112112

113-
for (i = 0; i < MLX5_MAX_PORTS; i++) {
113+
for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++) {
114114
for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++) {
115115
u32 in[MLX5_ST_SZ_DW(create_tis_in)] = {};
116116
void *tisc;
@@ -140,7 +140,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT
140140
return err;
141141
}
142142

143-
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)
143+
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises)
144144
{
145145
struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
146146
int err;
@@ -169,11 +169,15 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)
169169
goto err_destroy_mkey;
170170
}
171171

172-
err = mlx5e_create_tises(mdev, res->tisn);
173-
if (err) {
174-
mlx5_core_err(mdev, "alloc tises failed, %d\n", err);
175-
goto err_destroy_bfreg;
172+
if (create_tises) {
173+
err = mlx5e_create_tises(mdev, res->tisn);
174+
if (err) {
175+
mlx5_core_err(mdev, "alloc tises failed, %d\n", err);
176+
goto err_destroy_bfreg;
177+
}
178+
res->tisn_valid = true;
176179
}
180+
177181
INIT_LIST_HEAD(&res->td.tirs_list);
178182
mutex_init(&res->td.list_lock);
179183

@@ -203,7 +207,8 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
203207

204208
mlx5_crypto_dek_cleanup(mdev->mlx5e_res.dek_priv);
205209
mdev->mlx5e_res.dek_priv = NULL;
206-
mlx5e_destroy_tises(mdev, res->tisn);
210+
if (res->tisn_valid)
211+
mlx5e_destroy_tises(mdev, res->tisn);
207212
mlx5_free_bfreg(mdev, &res->bfreg);
208213
mlx5_core_destroy_mkey(mdev, res->mkey);
209214
mlx5_core_dealloc_transport_domain(mdev, res->td.tdn);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5992,7 +5992,7 @@ static int mlx5e_resume(struct auxiliary_device *adev)
59925992
if (netif_device_present(netdev))
59935993
return 0;
59945994

5995-
err = mlx5e_create_mdev_resources(mdev);
5995+
err = mlx5e_create_mdev_resources(mdev, true);
59965996
if (err)
59975997
return err;
59985998

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ static int mlx5_rdma_setup_rn(struct ib_device *ibdev, u32 port_num,
783783
}
784784

785785
/* This should only be called once per mdev */
786-
err = mlx5e_create_mdev_resources(mdev);
786+
err = mlx5e_create_mdev_resources(mdev, false);
787787
if (err)
788788
goto destroy_ht;
789789
}

include/linux/mlx5/driver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ struct mlx5e_resources {
681681
struct mlx5_sq_bfreg bfreg;
682682
#define MLX5_MAX_NUM_TC 8
683683
u32 tisn[MLX5_MAX_PORTS][MLX5_MAX_NUM_TC];
684+
bool tisn_valid;
684685
} hw_objs;
685686
struct net_device *uplink_netdev;
686687
struct mutex uplink_netdev_lock;

0 commit comments

Comments
 (0)