| From foo@baz Mon May 16 11:20:33 PDT 2016 |
| From: Saeed Mahameed <saeedm@mellanox.com> |
| Date: Fri, 22 Apr 2016 00:33:04 +0300 |
| Subject: net/mlx5e: Fix minimum MTU |
| |
| From: Saeed Mahameed <saeedm@mellanox.com> |
| |
| [ Upstream commit d8edd2469ace550db707798180d1c84d81f93bca ] |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 11 ++++++++--- |
| 1 file changed, 8 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c |
| @@ -1906,22 +1906,27 @@ static int mlx5e_set_features(struct net |
| 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; |
| 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; |
| } |
| |