forked from mirrors/linux
		
	net/mlx5e: Correctly handle changing the number of queues when the interface is down
This commit addresses two issues related to changing the number of queues when the channels are closed: 1. Missing call to mlx5e_num_channels_changed to update real_num_tx_queues when the number of TCs is changed. 2. When mlx5e_num_channels_changed returns an error, the channel parameters must be reverted. Two Fixes: tags correspond to the first commits where these two issues were introduced. Fixes:3909a12e79("net/mlx5e: Fix configuration of XPS cpumasks and netdev queues in corner cases") Fixes:fa3748775b("net/mlx5e: Handle errors from netif_set_real_num_{tx,rx}_queues") Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
		
							parent
							
								
									89e3946758
								
							
						
					
					
						commit
						57ac4a31c4
					
				
					 2 changed files with 14 additions and 1 deletions
				
			
		| 
						 | 
					@ -447,12 +447,18 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv,
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new_channels.params = priv->channels.params;
 | 
						new_channels.params = *cur_params;
 | 
				
			||||||
	new_channels.params.num_channels = count;
 | 
						new_channels.params.num_channels = count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
 | 
						if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
 | 
				
			||||||
 | 
							struct mlx5e_params old_params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							old_params = *cur_params;
 | 
				
			||||||
		*cur_params = new_channels.params;
 | 
							*cur_params = new_channels.params;
 | 
				
			||||||
		err = mlx5e_num_channels_changed(priv);
 | 
							err = mlx5e_num_channels_changed(priv);
 | 
				
			||||||
 | 
							if (err)
 | 
				
			||||||
 | 
								*cur_params = old_params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3614,7 +3614,14 @@ static int mlx5e_setup_tc_mqprio(struct mlx5e_priv *priv,
 | 
				
			||||||
	new_channels.params.num_tc = tc ? tc : 1;
 | 
						new_channels.params.num_tc = tc ? tc : 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
 | 
						if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
 | 
				
			||||||
 | 
							struct mlx5e_params old_params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							old_params = priv->channels.params;
 | 
				
			||||||
		priv->channels.params = new_channels.params;
 | 
							priv->channels.params = new_channels.params;
 | 
				
			||||||
 | 
							err = mlx5e_num_channels_changed(priv);
 | 
				
			||||||
 | 
							if (err)
 | 
				
			||||||
 | 
								priv->channels.params = old_params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue