]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: improve ndev->max_mtu setup readability
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 11 Nov 2025 11:26:34 +0000 (11:26 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Nov 2025 17:17:20 +0000 (09:17 -0800)
Improve the readibility of the code setting ndev->max_mtu. This depends
on the hardware specific maximum defined by the MAC core, and also a
platform provided maximum.

The code was originally checking that the platform specific maximum was
between ndev->min_mtu..MAC core maximum before reducing ndev->max_mtu,
otherwise if the platform specific maximum was less than ndev->min_mtu,
issuing a warning.

Re-order the code to handle the case where the platform specific max is
below ndev->min_mtu, which then means that the subsequent test is
simply reducing ndev->max_mtu.

Update the comment, and add a few blank lines to separate the blocks of
code.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vImWA-0000000DrIl-1HZY@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index ccf383b355e7579ed2ef0115e5919dc609919f1a..eb43501939962ee1b91441306320fa02ca118c14 100644 (file)
@@ -1392,9 +1392,9 @@ static unsigned int stmmac_rx_offset(struct stmmac_priv *priv)
        return NET_SKB_PAD;
 }
 
-static int stmmac_set_bfsize(int mtu, int bufsize)
+static int stmmac_set_bfsize(int mtu)
 {
-       int ret = bufsize;
+       int ret;
 
        if (mtu >= BUF_SIZE_8KiB)
                ret = BUF_SIZE_16KiB;
@@ -3958,12 +3958,13 @@ stmmac_setup_dma_desc(struct stmmac_priv *priv, unsigned int mtu)
                return ERR_PTR(-ENOMEM);
        }
 
+       /* Returns 0 or BUF_SIZE_16KiB if mtu > 8KiB and dwmac4 or ring mode */
        bfsize = stmmac_set_16kib_bfsize(priv, mtu);
        if (bfsize < 0)
                bfsize = 0;
 
        if (bfsize < BUF_SIZE_16KiB)
-               bfsize = stmmac_set_bfsize(mtu, 0);
+               bfsize = stmmac_set_bfsize(mtu);
 
        dma_conf->dma_buf_sz = bfsize;
        /* Chose the tx/rx size from the already defined one in the
@@ -7773,22 +7774,23 @@ int stmmac_dvr_probe(struct device *device,
 
        /* MTU range: 46 - hw-specific max */
        ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
+
        if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                ndev->max_mtu = XGMAC_JUMBO_LEN;
-       else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
+       else if (priv->plat->enh_desc || priv->synopsys_id >= DWMAC_CORE_4_00)
                ndev->max_mtu = JUMBO_LEN;
        else
                ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
-       /* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
-        * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
+
+       /* Warn if the platform's maxmtu is smaller than the minimum MTU,
+        * otherwise clamp the maximum MTU above to the platform's maxmtu.
         */
-       if ((priv->plat->maxmtu < ndev->max_mtu) &&
-           (priv->plat->maxmtu >= ndev->min_mtu))
-               ndev->max_mtu = priv->plat->maxmtu;
-       else if (priv->plat->maxmtu < ndev->min_mtu)
+       if (priv->plat->maxmtu < ndev->min_mtu)
                dev_warn(priv->device,
                         "%s: warning: maxmtu having invalid value (%d)\n",
                         __func__, priv->plat->maxmtu);
+       else if (priv->plat->maxmtu < ndev->max_mtu)
+               ndev->max_mtu = priv->plat->maxmtu;
 
        ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;