Skip to content

Commit d894be5

Browse files
jarodwilsondavem330
authored andcommitted
ethernet: use net core MTU range checking in more drivers
Somehow, I missed a healthy number of ethernet drivers in the last pass. Most of these drivers either were in need of an updated max_mtu to make jumbo frames possible to enable again. In a few cases, also setting a different min_mtu to match previous lower bounds. There are also a few drivers that had no upper bounds checking, so they're getting a brand new ETH_MAX_MTU that is identical to IP_MAX_MTU, but accessible by includes all ethernet and ethernet-like drivers all have already. acenic: - min_mtu = 0, max_mtu = 9000 amazon/ena: - min_mtu = 128, max_mtu = adapter->max_mtu amd/xgbe: - min_mtu = 0, max_mtu = 9000 sb1250: - min_mtu = 0, max_mtu = 1518 cxgb3: - min_mtu = 81, max_mtu = 65535 cxgb4: - min_mtu = 81, max_mtu = 9600 cxgb4vf: - min_mtu = 81, max_mtu = 65535 benet: - min_mtu = 256, max_mtu = 9000 ibmveth: - min_mtu = 68, max_mtu = 65535 ibmvnic: - min_mtu = adapter->min_mtu, max_mtu = adapter->max_mtu - remove now redundant ibmvnic_change_mtu jme: - min_mtu = 1280, max_mtu = 9202 mv643xx_eth: - min_mtu = 64, max_mtu = 9500 mlxsw: - min_mtu = 0, max_mtu = 65535 - Basically bypassing the core checks, and instead relying on dynamic checks in the respective switch drivers' ndo_change_mtu functions ns83820: - min_mtu = 0 - remove redundant ns83820_change_mtu, only checked for mtu > 1500 netxen: - min_mtu = 0, max_mtu = 8000 (P2), max_mtu = 9600 (P3) qlge: - min_mtu = 1500, max_mtu = 9000 - driver only supports setting mtu to 1500 or 9000, so the core check only rules out < 1500 and > 9000, qlge_change_mtu still needs to check that the value is 1500 or 9000 qualcomm/emac: - min_mtu = 46, max_mtu = 9194 xilinx_axienet: - min_mtu = 64, max_mtu = 9000 Fixes: 61e8462 ("net: centralize net_device min/max MTU checking") CC: [email protected] CC: Jes Sorensen <[email protected]> CC: Netanel Belgazal <[email protected]> CC: Tom Lendacky <[email protected]> CC: Santosh Raspatur <[email protected]> CC: Hariprasad S <[email protected]> CC: Sathya Perla <[email protected]> CC: Ajit Khaparde <[email protected]> CC: Sriharsha Basavapatna <[email protected]> CC: Somnath Kotur <[email protected]> CC: Thomas Falcon <[email protected]> CC: John Allen <[email protected]> CC: Guo-Fu Tseng <[email protected]> CC: Sebastian Hesselbarth <[email protected]> CC: Jiri Pirko <[email protected]> CC: Ido Schimmel <[email protected]> CC: Manish Chopra <[email protected]> CC: Sony Chacko <[email protected]> CC: Rajesh Borundia <[email protected]> CC: Timur Tabi <[email protected]> CC: Anirudha Sarangi <[email protected]> CC: John Linn <[email protected]> Signed-off-by: Jarod Wilson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 1a61a8f commit d894be5

File tree

22 files changed

+68
-108
lines changed

22 files changed

+68
-108
lines changed

drivers/net/ethernet/alteon/acenic.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,8 @@ static int acenic_probe_one(struct pci_dev *pdev,
474474
dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
475475

476476
dev->watchdog_timeo = 5*HZ;
477+
dev->min_mtu = 0;
478+
dev->max_mtu = ACE_JUMBO_MTU;
477479

478480
dev->netdev_ops = &ace_netdev_ops;
479481
dev->ethtool_ops = &ace_ethtool_ops;
@@ -2548,9 +2550,6 @@ static int ace_change_mtu(struct net_device *dev, int new_mtu)
25482550
struct ace_private *ap = netdev_priv(dev);
25492551
struct ace_regs __iomem *regs = ap->regs;
25502552

2551-
if (new_mtu > ACE_JUMBO_MTU)
2552-
return -EINVAL;
2553-
25542553
writel(new_mtu + ETH_HLEN + 4, &regs->IfMtu);
25552554
dev->mtu = new_mtu;
25562555

drivers/net/ethernet/amazon/ena/ena_netdev.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,6 @@ static int ena_change_mtu(struct net_device *dev, int new_mtu)
103103
struct ena_adapter *adapter = netdev_priv(dev);
104104
int ret;
105105

106-
if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
107-
netif_err(adapter, drv, dev,
108-
"Invalid MTU setting. new_mtu: %d\n", new_mtu);
109-
110-
return -EINVAL;
111-
}
112-
113106
ret = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
114107
if (!ret) {
115108
netif_dbg(adapter, drv, dev, "set MTU to %d\n", new_mtu);
@@ -2755,6 +2748,8 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
27552748
ena_set_dev_offloads(feat, netdev);
27562749

27572750
adapter->max_mtu = feat->dev_attr.max_mtu;
2751+
netdev->max_mtu = adapter->max_mtu;
2752+
netdev->min_mtu = ENA_MIN_MTU;
27582753
}
27592754

27602755
static int ena_rss_init_default(struct ena_adapter *adapter)

drivers/net/ethernet/amd/xgbe/xgbe-drv.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,6 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
257257
{
258258
unsigned int rx_buf_size;
259259

260-
if (mtu > XGMAC_JUMBO_PACKET_MTU) {
261-
netdev_alert(netdev, "MTU exceeds maximum supported value\n");
262-
return -EINVAL;
263-
}
264-
265260
rx_buf_size = mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
266261
rx_buf_size = clamp_val(rx_buf_size, XGBE_RX_MIN_BUF_SIZE, PAGE_SIZE);
267262

drivers/net/ethernet/amd/xgbe/xgbe-main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,8 @@ static int xgbe_probe(struct platform_device *pdev)
738738
pdata->netdev_features = netdev->features;
739739

740740
netdev->priv_flags |= IFF_UNICAST_FLT;
741+
netdev->min_mtu = 0;
742+
netdev->max_mtu = XGMAC_JUMBO_PACKET_MTU;
741743

742744
/* Use default watchdog timeout */
743745
netdev->watchdog_timeo = 0;

drivers/net/ethernet/broadcom/sb1250-mac.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,23 +2147,13 @@ static void sbmac_setmulti(struct sbmac_softc *sc)
21472147
}
21482148
}
21492149

2150-
static int sb1250_change_mtu(struct net_device *_dev, int new_mtu)
2151-
{
2152-
if (new_mtu > ENET_PACKET_SIZE)
2153-
return -EINVAL;
2154-
_dev->mtu = new_mtu;
2155-
pr_info("changing the mtu to %d\n", new_mtu);
2156-
return 0;
2157-
}
2158-
21592150
static const struct net_device_ops sbmac_netdev_ops = {
21602151
.ndo_open = sbmac_open,
21612152
.ndo_stop = sbmac_close,
21622153
.ndo_start_xmit = sbmac_start_tx,
21632154
.ndo_set_rx_mode = sbmac_set_rx_mode,
21642155
.ndo_tx_timeout = sbmac_tx_timeout,
21652156
.ndo_do_ioctl = sbmac_mii_ioctl,
2166-
.ndo_change_mtu = sb1250_change_mtu,
21672157
.ndo_validate_addr = eth_validate_addr,
21682158
.ndo_set_mac_address = eth_mac_addr,
21692159
#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -2229,6 +2219,8 @@ static int sbmac_init(struct platform_device *pldev, long long base)
22292219

22302220
dev->netdev_ops = &sbmac_netdev_ops;
22312221
dev->watchdog_timeo = TX_TIMEOUT;
2222+
dev->max_mtu = 0;
2223+
dev->max_mtu = ENET_PACKET_SIZE;
22322224

22332225
netif_napi_add(dev, &sc->napi, sbmac_poll, 16);
22342226

drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2531,8 +2531,6 @@ static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
25312531
struct adapter *adapter = pi->adapter;
25322532
int ret;
25332533

2534-
if (new_mtu < 81) /* accommodate SACK */
2535-
return -EINVAL;
25362534
if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu)))
25372535
return ret;
25382536
dev->mtu = new_mtu;
@@ -3295,6 +3293,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
32953293

32963294
netdev->netdev_ops = &cxgb_netdev_ops;
32973295
netdev->ethtool_ops = &cxgb_ethtool_ops;
3296+
netdev->min_mtu = 81;
3297+
netdev->max_mtu = ETH_MAX_MTU;
32983298
}
32993299

33003300
pci_set_drvdata(pdev, adapter);

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2502,8 +2502,6 @@ static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
25022502
int ret;
25032503
struct port_info *pi = netdev_priv(dev);
25042504

2505-
if (new_mtu < 81 || new_mtu > MAX_MTU) /* accommodate SACK */
2506-
return -EINVAL;
25072505
ret = t4_set_rxmode(pi->adapter, pi->adapter->pf, pi->viid, new_mtu, -1,
25082506
-1, -1, -1, true);
25092507
if (!ret)
@@ -4803,6 +4801,10 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
48034801

48044802
netdev->priv_flags |= IFF_UNICAST_FLT;
48054803

4804+
/* MTU range: 81 - 9600 */
4805+
netdev->min_mtu = 81;
4806+
netdev->max_mtu = MAX_MTU;
4807+
48064808
netdev->netdev_ops = &cxgb4_netdev_ops;
48074809
#ifdef CONFIG_CHELSIO_T4_DCB
48084810
netdev->dcbnl_ops = &cxgb4_dcb_ops;

drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,10 +1108,6 @@ static int cxgb4vf_change_mtu(struct net_device *dev, int new_mtu)
11081108
int ret;
11091109
struct port_info *pi = netdev_priv(dev);
11101110

1111-
/* accommodate SACK */
1112-
if (new_mtu < 81)
1113-
return -EINVAL;
1114-
11151111
ret = t4vf_set_rxmode(pi->adapter, pi->viid, new_mtu,
11161112
-1, -1, -1, -1, true);
11171113
if (!ret)
@@ -2966,6 +2962,8 @@ static int cxgb4vf_pci_probe(struct pci_dev *pdev,
29662962
netdev->features |= NETIF_F_HIGHDMA;
29672963

29682964
netdev->priv_flags |= IFF_UNICAST_FLT;
2965+
netdev->min_mtu = 81;
2966+
netdev->max_mtu = ETH_MAX_MTU;
29692967

29702968
netdev->netdev_ops = &cxgb4vf_netdev_ops;
29712969
netdev->ethtool_ops = &cxgb4vf_ethtool_ops;

drivers/net/ethernet/emulex/benet/be_main.c

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,23 +1406,6 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
14061406
return NETDEV_TX_OK;
14071407
}
14081408

1409-
static int be_change_mtu(struct net_device *netdev, int new_mtu)
1410-
{
1411-
struct be_adapter *adapter = netdev_priv(netdev);
1412-
struct device *dev = &adapter->pdev->dev;
1413-
1414-
if (new_mtu < BE_MIN_MTU || new_mtu > BE_MAX_MTU) {
1415-
dev_info(dev, "MTU must be between %d and %d bytes\n",
1416-
BE_MIN_MTU, BE_MAX_MTU);
1417-
return -EINVAL;
1418-
}
1419-
1420-
dev_info(dev, "MTU changed from %d to %d bytes\n",
1421-
netdev->mtu, new_mtu);
1422-
netdev->mtu = new_mtu;
1423-
return 0;
1424-
}
1425-
14261409
static inline bool be_in_all_promisc(struct be_adapter *adapter)
14271410
{
14281411
return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) ==
@@ -5216,7 +5199,6 @@ static const struct net_device_ops be_netdev_ops = {
52165199
.ndo_start_xmit = be_xmit,
52175200
.ndo_set_rx_mode = be_set_rx_mode,
52185201
.ndo_set_mac_address = be_mac_addr_set,
5219-
.ndo_change_mtu = be_change_mtu,
52205202
.ndo_get_stats64 = be_get_stats64,
52215203
.ndo_validate_addr = eth_validate_addr,
52225204
.ndo_vlan_rx_add_vid = be_vlan_add_vid,
@@ -5266,6 +5248,10 @@ static void be_netdev_init(struct net_device *netdev)
52665248
netdev->netdev_ops = &be_netdev_ops;
52675249

52685250
netdev->ethtool_ops = &be_ethtool_ops;
5251+
5252+
/* MTU range: 256 - 9000 */
5253+
netdev->min_mtu = BE_MIN_MTU;
5254+
netdev->max_mtu = BE_MAX_MTU;
52695255
}
52705256

52715257
static void be_cleanup(struct be_adapter *adapter)

drivers/net/ethernet/ibm/ibmveth.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,9 +1349,6 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
13491349
int i, rc;
13501350
int need_restart = 0;
13511351

1352-
if (new_mtu < IBMVETH_MIN_MTU)
1353-
return -EINVAL;
1354-
13551352
for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++)
13561353
if (new_mtu_oh <= adapter->rx_buff_pool[i].buff_size)
13571354
break;
@@ -1551,6 +1548,9 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
15511548
netdev->hw_features |= NETIF_F_TSO;
15521549
}
15531550

1551+
netdev->min_mtu = IBMVETH_MIN_MTU;
1552+
netdev->min_mtu = ETH_MAX_MTU;
1553+
15541554
memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN);
15551555

15561556
if (firmware_has_feature(FW_FEATURE_CMO))

0 commit comments

Comments
 (0)