diff mbox

[xenial] (upstream) net/mlx5e: Fix minimum MTU

Message ID 1462884702-59963-1-git-send-email-talatb@mellanox.com
State New
Headers show

Commit Message

Talat Batheesh May 10, 2016, 12:51 p.m. UTC
From: Saeed Mahameed <saeedm@mellanox.com>

BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1528466

Minimum MTU that can be set in Connectx4 device is 68.

This fixes the case where a user wants to set invalid MTU,
the driver will fail to satisfy this request and the interface
will stay down.

It is better to report an error and continue working with old
mtu.

Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit d8edd2469ace550db707798180d1c84d81f93bca upstream)
Signed-off-by: Talat Batheesh <talatb@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Tim Gardner May 10, 2016, 2:11 p.m. UTC | #1

Kamal Mostafa May 10, 2016, 6:02 p.m. UTC | #2
NAK, because applying this patch (d8edd24) to Xenial results in this warning:

..........
drivers/net/ethernet/mellanox/mlx5/core/en_main.c:
In function 'mlx5e_change_mtu':
drivers/net/ethernet/mellanox/mlx5/core/en_main.c:1905:32:
warning: passing argument 2 of 'mlx5_query_port_max_mtu' from
incompatible pointer type [-Wincompatible-pointer-types]
  mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
				^
In file included from
include/linux/mlx5/flow_table.h:36:0,
		 from
drivers/net/ethernet/mellanox/mlx5/core/en_main.c:33:
include/linux/mlx5/driver.h:815:6:
note: expected 'int *' but argument is of type 'u16 * {aka short unsigned int *}'
 void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);
      ^
..........

It looks like this would probably also need (at least):

  [mainline] 046339e net/mlx5e: Device's mtu field is u16 and not int

Please test and re-submit.  Thanks!

 -Kamal


On Tue, May 10, 2016 at 03:51:42PM +0300, Talat Batheesh wrote:
> From: Saeed Mahameed <saeedm@mellanox.com>
> 
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1528466
> 
> Minimum MTU that can be set in Connectx4 device is 68.
> 
> This fixes the case where a user wants to set invalid MTU,
> the driver will fail to satisfy this request and the interface
> will stay down.
> 
> It is better to report an error and continue working with old
> mtu.
> 
> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit d8edd2469ace550db707798180d1c84d81f93bca upstream)
> Signed-off-by: Talat Batheesh <talatb@mellanox.com>
> ---
>  drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> index 9923450..5feb124 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> @@ -1890,22 +1890,27 @@ static int mlx5e_set_features(struct net_device *netdev,
>  	return err;
>  }
>  
> +#define MXL5_HW_MIN_MTU 64
> +#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
> +
>  static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
>  {
>  	struct mlx5e_priv *priv = netdev_priv(netdev);
>  	struct mlx5_core_dev *mdev = priv->mdev;
>  	bool was_opened;
> -	int max_mtu;
> +	u16 max_mtu;
> +	u16 min_mtu;
>  	int err = 0;
>  
>  	mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
>  
>  	max_mtu = MLX5E_HW2SW_MTU(max_mtu);
> +	min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
>  
> -	if (new_mtu > max_mtu) {
> +	if (new_mtu > max_mtu || new_mtu < min_mtu) {
>  		netdev_err(netdev,
> -			   "%s: Bad MTU (%d) > (%d) Max\n",
> -			   __func__, new_mtu, max_mtu);
> +			   "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
> +			   __func__, new_mtu, min_mtu, max_mtu);
>  		return -EINVAL;
>  	}
>  
> -- 
> 2.5.0
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
diff mbox

Patch

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 9923450..5feb124 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -1890,22 +1890,27 @@  static int mlx5e_set_features(struct net_device *netdev,
 	return err;
 }
 
+#define MXL5_HW_MIN_MTU 64
+#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
+
 static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
 {
 	struct mlx5e_priv *priv = netdev_priv(netdev);
 	struct mlx5_core_dev *mdev = priv->mdev;
 	bool was_opened;
-	int max_mtu;
+	u16 max_mtu;
+	u16 min_mtu;
 	int err = 0;
 
 	mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
 
 	max_mtu = MLX5E_HW2SW_MTU(max_mtu);
+	min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
 
-	if (new_mtu > max_mtu) {
+	if (new_mtu > max_mtu || new_mtu < min_mtu) {
 		netdev_err(netdev,
-			   "%s: Bad MTU (%d) > (%d) Max\n",
-			   __func__, new_mtu, max_mtu);
+			   "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
+			   __func__, new_mtu, min_mtu, max_mtu);
 		return -EINVAL;
 	}