]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mlxsw: spectrum: Set more accurate values for netdevice min/max MTU
authorAmit Cohen <amcohen@nvidia.com>
Thu, 13 Jun 2024 14:07:56 +0000 (16:07 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 15 Jun 2024 02:30:34 +0000 (19:30 -0700)
Currently, the driver uses ETH_MAX_MTU as maximum MTU of netdevices,
instead, use the accurate value which is supported by the driver.
Subtract Ethernet headers which are taken into account by hardware for
MTU checking, as described in the previous patch.

Set minimum MTU to ETH_MIN_MTU, as zero MTU is not really supported.

With this change:
a. The stack will do the MTU checking, so we can remove it from the driver.
b. User space will be able to query the actual MTU limits.
   Before this patch:
   $ ip -j -d link show dev swp1 | jq | grep mtu
    "mtu": 1500,
    "min_mtu": 0,
    "max_mtu": 65535,

   With this patch:
   $ ip -j -d link show dev swp1 | jq | grep mtu
    "mtu": 1500,
    "min_mtu": 68,
    "max_mtu": 10218,

Signed-off-by: Amit Cohen <amcohen@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Link: https://lore.kernel.org/r/be8232e38c196ecb607f82c5e000ea427ce22abb.1718275854.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index 879daa18cccabcdebb254bfc56253e3ab23c4d4b..c5856f4d6b8bef08a9fafa9a72345134647086a6 100644 (file)
@@ -426,8 +426,6 @@ static int mlxsw_sp_port_mtu_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 mtu)
        char pmtu_pl[MLXSW_REG_PMTU_LEN];
 
        mtu += MLXSW_PORT_ETH_FRAME_HDR;
-       if (mtu > mlxsw_sp_port->max_mtu)
-               return -EINVAL;
 
        mlxsw_reg_pmtu_pack(pmtu_pl, mlxsw_sp_port->local_port, mtu);
        return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pmtu), pmtu_pl);
@@ -1697,8 +1695,8 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u16 local_port,
                         NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_TC;
        dev->hw_features |= NETIF_F_HW_TC | NETIF_F_LOOPBACK;
 
-       dev->min_mtu = 0;
-       dev->max_mtu = ETH_MAX_MTU;
+       dev->min_mtu = ETH_MIN_MTU;
+       dev->max_mtu = MLXSW_PORT_MAX_MTU - MLXSW_PORT_ETH_FRAME_HDR;
 
        /* Each packet needs to have a Tx header (metadata) on top all other
         * headers.