Skip to content

Commit bf1f939

Browse files
Shaker Daibesdavem330
authored andcommitted
net/mlx4_en: Check the enabling mtu flag in SET_PORT wrapper flow
Make sure MTU mask flag is set using new field upon set port request. In addition, move this code into a helper function for better code readability. Signed-off-by: Shaker Daibes <[email protected]> Signed-off-by: Tariq Toukan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 40fb4fc commit bf1f939

File tree

1 file changed

+37
-22
lines changed
  • drivers/net/ethernet/mellanox/mlx4

1 file changed

+37
-22
lines changed

drivers/net/ethernet/mellanox/mlx4/port.c

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
#define MLX4_FLAG2_V_IGNORE_FCS_MASK BIT(1)
5454
#define MLX4_FLAG2_V_USER_MTU_MASK BIT(5)
55+
#define MLX4_FLAG_V_MTU_MASK BIT(0)
5556
#define MLX4_IGNORE_FCS_MASK 0x1
5657
#define MLX4_TC_MAX_NUMBER 8
5758

@@ -1240,6 +1241,38 @@ void mlx4_reset_roce_gids(struct mlx4_dev *dev, int slave)
12401241
return;
12411242
}
12421243

1244+
static void
1245+
mlx4_en_set_port_mtu(struct mlx4_dev *dev, int slave, int port,
1246+
struct mlx4_set_port_general_context *gen_context)
1247+
{
1248+
struct mlx4_priv *priv = mlx4_priv(dev);
1249+
struct mlx4_mfunc_master_ctx *master = &priv->mfunc.master;
1250+
struct mlx4_slave_state *slave_st = &master->slave_state[slave];
1251+
u16 mtu, prev_mtu;
1252+
1253+
/* Mtu is configured as the max USER_MTU among all
1254+
* the functions on the port.
1255+
*/
1256+
mtu = be16_to_cpu(gen_context->mtu);
1257+
mtu = min_t(int, mtu, dev->caps.eth_mtu_cap[port] +
1258+
ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
1259+
prev_mtu = slave_st->mtu[port];
1260+
slave_st->mtu[port] = mtu;
1261+
if (mtu > master->max_mtu[port])
1262+
master->max_mtu[port] = mtu;
1263+
if (mtu < prev_mtu && prev_mtu == master->max_mtu[port]) {
1264+
int i;
1265+
1266+
slave_st->mtu[port] = mtu;
1267+
master->max_mtu[port] = mtu;
1268+
for (i = 0; i < dev->num_slaves; i++)
1269+
master->max_mtu[port] =
1270+
max_t(u16, master->max_mtu[port],
1271+
master->slave_state[i].mtu[port]);
1272+
}
1273+
gen_context->mtu = cpu_to_be16(master->max_mtu[port]);
1274+
}
1275+
12431276
static void
12441277
mlx4_en_set_port_user_mtu(struct mlx4_dev *dev, int slave, int port,
12451278
struct mlx4_set_port_general_context *gen_context)
@@ -1278,7 +1311,6 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
12781311
struct mlx4_priv *priv = mlx4_priv(dev);
12791312
struct mlx4_port_info *port_info;
12801313
struct mlx4_mfunc_master_ctx *master = &priv->mfunc.master;
1281-
struct mlx4_slave_state *slave_st = &master->slave_state[slave];
12821314
struct mlx4_set_port_rqp_calc_context *qpn_context;
12831315
struct mlx4_set_port_general_context *gen_context;
12841316
struct mlx4_roce_gid_entry *gid_entry_tbl, *gid_entry_mbox, *gid_entry_mb1;
@@ -1289,7 +1321,6 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
12891321
int base;
12901322
u32 in_modifier;
12911323
u32 promisc;
1292-
u16 mtu, prev_mtu;
12931324
int err;
12941325
int i, j;
12951326
int offset;
@@ -1332,26 +1363,10 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
13321363
break;
13331364
case MLX4_SET_PORT_GENERAL:
13341365
gen_context = inbox->buf;
1335-
/* Mtu is configured as the max MTU among all the
1336-
* the functions on the port. */
1337-
mtu = be16_to_cpu(gen_context->mtu);
1338-
mtu = min_t(int, mtu, dev->caps.eth_mtu_cap[port] +
1339-
ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
1340-
prev_mtu = slave_st->mtu[port];
1341-
slave_st->mtu[port] = mtu;
1342-
if (mtu > master->max_mtu[port])
1343-
master->max_mtu[port] = mtu;
1344-
if (mtu < prev_mtu && prev_mtu ==
1345-
master->max_mtu[port]) {
1346-
slave_st->mtu[port] = mtu;
1347-
master->max_mtu[port] = mtu;
1348-
for (i = 0; i < dev->num_slaves; i++) {
1349-
master->max_mtu[port] =
1350-
max(master->max_mtu[port],
1351-
master->slave_state[i].mtu[port]);
1352-
}
1353-
}
1354-
gen_context->mtu = cpu_to_be16(master->max_mtu[port]);
1366+
1367+
if (gen_context->flags & MLX4_FLAG_V_MTU_MASK)
1368+
mlx4_en_set_port_mtu(dev, slave, port,
1369+
gen_context);
13551370

13561371
if (gen_context->flags2 & MLX4_FLAG2_V_USER_MTU_MASK)
13571372
mlx4_en_set_port_user_mtu(dev, slave, port,

0 commit comments

Comments
 (0)