@@ -419,6 +419,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c,
419
419
rq -> channel = c ;
420
420
rq -> ix = c -> ix ;
421
421
rq -> mdev = mdev ;
422
+ rq -> hw_mtu = MLX5E_SW2HW_MTU (params , params -> sw_mtu );
422
423
423
424
rq -> xdp_prog = params -> xdp_prog ? bpf_prog_inc (params -> xdp_prog ) : NULL ;
424
425
if (IS_ERR (rq -> xdp_prog )) {
@@ -494,7 +495,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c,
494
495
495
496
byte_count = params -> lro_en ?
496
497
params -> lro_wqe_sz :
497
- MLX5E_SW2HW_MTU (c -> priv , c -> netdev -> mtu );
498
+ MLX5E_SW2HW_MTU (params , params -> sw_mtu );
498
499
#ifdef CONFIG_MLX5_EN_IPSEC
499
500
if (MLX5_IPSEC_DEV (mdev ))
500
501
byte_count += MLX5E_METADATA_ETHER_LEN ;
@@ -2498,10 +2499,10 @@ static void mlx5e_build_inner_indir_tir_ctx(struct mlx5e_priv *priv,
2498
2499
mlx5e_build_indir_tir_ctx_hash (& priv -> channels .params , tt , tirc , true);
2499
2500
}
2500
2501
2501
- static int mlx5e_set_mtu (struct mlx5e_priv * priv , u16 mtu )
2502
+ static int mlx5e_set_mtu (struct mlx5_core_dev * mdev ,
2503
+ struct mlx5e_params * params , u16 mtu )
2502
2504
{
2503
- struct mlx5_core_dev * mdev = priv -> mdev ;
2504
- u16 hw_mtu = MLX5E_SW2HW_MTU (priv , mtu );
2505
+ u16 hw_mtu = MLX5E_SW2HW_MTU (params , mtu );
2505
2506
int err ;
2506
2507
2507
2508
err = mlx5_set_port_mtu (mdev , hw_mtu , 1 );
@@ -2513,35 +2514,37 @@ static int mlx5e_set_mtu(struct mlx5e_priv *priv, u16 mtu)
2513
2514
return 0 ;
2514
2515
}
2515
2516
2516
- static void mlx5e_query_mtu (struct mlx5e_priv * priv , u16 * mtu )
2517
+ static void mlx5e_query_mtu (struct mlx5_core_dev * mdev ,
2518
+ struct mlx5e_params * params , u16 * mtu )
2517
2519
{
2518
- struct mlx5_core_dev * mdev = priv -> mdev ;
2519
2520
u16 hw_mtu = 0 ;
2520
2521
int err ;
2521
2522
2522
2523
err = mlx5_query_nic_vport_mtu (mdev , & hw_mtu );
2523
2524
if (err || !hw_mtu ) /* fallback to port oper mtu */
2524
2525
mlx5_query_port_oper_mtu (mdev , & hw_mtu , 1 );
2525
2526
2526
- * mtu = MLX5E_HW2SW_MTU (priv , hw_mtu );
2527
+ * mtu = MLX5E_HW2SW_MTU (params , hw_mtu );
2527
2528
}
2528
2529
2529
2530
static int mlx5e_set_dev_port_mtu (struct mlx5e_priv * priv )
2530
2531
{
2532
+ struct mlx5e_params * params = & priv -> channels .params ;
2531
2533
struct net_device * netdev = priv -> netdev ;
2534
+ struct mlx5_core_dev * mdev = priv -> mdev ;
2532
2535
u16 mtu ;
2533
2536
int err ;
2534
2537
2535
- err = mlx5e_set_mtu (priv , netdev -> mtu );
2538
+ err = mlx5e_set_mtu (mdev , params , params -> sw_mtu );
2536
2539
if (err )
2537
2540
return err ;
2538
2541
2539
- mlx5e_query_mtu (priv , & mtu );
2540
- if (mtu != netdev -> mtu )
2542
+ mlx5e_query_mtu (mdev , params , & mtu );
2543
+ if (mtu != params -> sw_mtu )
2541
2544
netdev_warn (netdev , "%s: VPort MTU %d is different than netdev mtu %d\n" ,
2542
- __func__ , mtu , netdev -> mtu );
2545
+ __func__ , mtu , params -> sw_mtu );
2543
2546
2544
- netdev -> mtu = mtu ;
2547
+ params -> sw_mtu = mtu ;
2545
2548
return 0 ;
2546
2549
}
2547
2550
@@ -3411,34 +3414,33 @@ static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
3411
3414
{
3412
3415
struct mlx5e_priv * priv = netdev_priv (netdev );
3413
3416
struct mlx5e_channels new_channels = {};
3414
- int curr_mtu ;
3417
+ struct mlx5e_params * params ;
3415
3418
int err = 0 ;
3416
3419
bool reset ;
3417
3420
3418
3421
mutex_lock (& priv -> state_lock );
3419
3422
3420
- reset = ! priv -> channels .params . lro_en &&
3421
- ( priv -> channels . params . rq_wq_type !=
3422
- MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ );
3423
+ params = & priv -> channels .params ;
3424
+ reset = ! params -> lro_en &&
3425
+ ( params -> rq_wq_type != MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ );
3423
3426
3424
3427
reset = reset && test_bit (MLX5E_STATE_OPENED , & priv -> state );
3425
3428
3426
- curr_mtu = netdev -> mtu ;
3427
- netdev -> mtu = new_mtu ;
3428
-
3429
3429
if (!reset ) {
3430
+ params -> sw_mtu = new_mtu ;
3430
3431
mlx5e_set_dev_port_mtu (priv );
3432
+ netdev -> mtu = params -> sw_mtu ;
3431
3433
goto out ;
3432
3434
}
3433
3435
3434
- new_channels .params = priv -> channels .params ;
3436
+ new_channels .params = * params ;
3437
+ new_channels .params .sw_mtu = new_mtu ;
3435
3438
err = mlx5e_open_channels (priv , & new_channels );
3436
- if (err ) {
3437
- netdev -> mtu = curr_mtu ;
3439
+ if (err )
3438
3440
goto out ;
3439
- }
3440
3441
3441
3442
mlx5e_switch_priv_channels (priv , & new_channels , mlx5e_set_dev_port_mtu );
3443
+ netdev -> mtu = new_channels .params .sw_mtu ;
3442
3444
3443
3445
out :
3444
3446
mutex_unlock (& priv -> state_lock );
@@ -4111,10 +4113,12 @@ static u32 mlx5e_choose_lro_timeout(struct mlx5_core_dev *mdev, u32 wanted_timeo
4111
4113
4112
4114
void mlx5e_build_nic_params (struct mlx5_core_dev * mdev ,
4113
4115
struct mlx5e_params * params ,
4114
- u16 max_channels )
4116
+ u16 max_channels , u16 mtu )
4115
4117
{
4116
4118
u8 cq_period_mode = 0 ;
4117
4119
4120
+ params -> sw_mtu = mtu ;
4121
+ params -> hard_mtu = MLX5E_ETH_HARD_MTU ;
4118
4122
params -> num_channels = max_channels ;
4119
4123
params -> num_tc = 1 ;
4120
4124
@@ -4175,9 +4179,9 @@ static void mlx5e_build_nic_netdev_priv(struct mlx5_core_dev *mdev,
4175
4179
priv -> profile = profile ;
4176
4180
priv -> ppriv = ppriv ;
4177
4181
priv -> msglevel = MLX5E_MSG_LEVEL ;
4178
- priv -> hard_mtu = MLX5E_ETH_HARD_MTU ;
4179
4182
4180
- mlx5e_build_nic_params (mdev , & priv -> channels .params , profile -> max_nch (mdev ));
4183
+ mlx5e_build_nic_params (mdev , & priv -> channels .params ,
4184
+ profile -> max_nch (mdev ), netdev -> mtu );
4181
4185
4182
4186
mutex_init (& priv -> state_lock );
4183
4187
@@ -4454,7 +4458,7 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
4454
4458
/* MTU range: 68 - hw-specific max */
4455
4459
netdev -> min_mtu = ETH_MIN_MTU ;
4456
4460
mlx5_query_port_max_mtu (priv -> mdev , & max_mtu , 1 );
4457
- netdev -> max_mtu = MLX5E_HW2SW_MTU (priv , max_mtu );
4461
+ netdev -> max_mtu = MLX5E_HW2SW_MTU (& priv -> channels . params , max_mtu );
4458
4462
mlx5e_set_dev_port_mtu (priv );
4459
4463
4460
4464
mlx5_lag_add (mdev , netdev );
0 commit comments