Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

can: treewide: remove can_change_mtu()

can_change_mtu() became obsolete by commit 23049938605b ("can: populate the
minimum and maximum MTU values"). Now that net_device->min_mtu and
net_device->max_mtu are populated, all the checks are already done by
dev_validate_mtu() in net/core/dev.c.

Remove the net_device_ops->ndo_change_mtu() callback of all the physical
interfaces, then remove can_change_mtu(). Only keep the vcan_change_mtu()
and vxcan_change_mtu() because the virtual interfaces use their own
different MTU logic.

The only functional change this patch introduces is that now the user will
be able to change the MTU even if the interface is up. This does not matter
for Classical CAN and CAN FD because their MTU range is composed of only
one value, respectively CAN_MTU and CANFD_MTU. For the upcoming CAN XL, the
MTU will be configurable within the CANXL_MIN_MTU to CANXL_MAX_MTU range at
any time, even if the interface is up. This is consistent with the other
net protocols and does not contradict ISO 11898-1:2024 as having a
modifiable MTU is a kernel extension.

Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
Link: https://patch.msgid.link/20251003-remove-can_change_mtu-v1-1-337f8bc21181@kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

authored by

Vincent Mailhol and committed by
Marc Kleine-Budde
f968a24c 9271d0ea

-77
-1
drivers/net/can/at91_can.c
··· 948 948 .ndo_open = at91_open, 949 949 .ndo_stop = at91_close, 950 950 .ndo_start_xmit = at91_start_xmit, 951 - .ndo_change_mtu = can_change_mtu, 952 951 }; 953 952 954 953 static const struct ethtool_ops at91_ethtool_ops = {
-1
drivers/net/can/bxcan.c
··· 881 881 .ndo_open = bxcan_open, 882 882 .ndo_stop = bxcan_stop, 883 883 .ndo_start_xmit = bxcan_start_xmit, 884 - .ndo_change_mtu = can_change_mtu, 885 884 }; 886 885 887 886 static const struct ethtool_ops bxcan_ethtool_ops = {
-1
drivers/net/can/c_can/c_can_main.c
··· 1362 1362 .ndo_open = c_can_open, 1363 1363 .ndo_stop = c_can_close, 1364 1364 .ndo_start_xmit = c_can_start_xmit, 1365 - .ndo_change_mtu = can_change_mtu, 1366 1365 }; 1367 1366 1368 1367 int register_c_can_dev(struct net_device *dev)
-1
drivers/net/can/can327.c
··· 849 849 .ndo_open = can327_netdev_open, 850 850 .ndo_stop = can327_netdev_close, 851 851 .ndo_start_xmit = can327_netdev_start_xmit, 852 - .ndo_change_mtu = can_change_mtu, 853 852 }; 854 853 855 854 static const struct ethtool_ops can327_ethtool_ops = {
-1
drivers/net/can/cc770/cc770.c
··· 834 834 .ndo_open = cc770_open, 835 835 .ndo_stop = cc770_close, 836 836 .ndo_start_xmit = cc770_start_xmit, 837 - .ndo_change_mtu = can_change_mtu, 838 837 }; 839 838 840 839 static const struct ethtool_ops cc770_ethtool_ops = {
-1
drivers/net/can/ctucanfd/ctucanfd_base.c
··· 1301 1301 .ndo_open = ctucan_open, 1302 1302 .ndo_stop = ctucan_close, 1303 1303 .ndo_start_xmit = ctucan_start_xmit, 1304 - .ndo_change_mtu = can_change_mtu, 1305 1304 }; 1306 1305 1307 1306 static const struct ethtool_ops ctucan_ethtool_ops = {
-38
drivers/net/can/dev/dev.c
··· 359 359 } 360 360 } 361 361 362 - /* changing MTU and control mode for CAN/CANFD devices */ 363 - int can_change_mtu(struct net_device *dev, int new_mtu) 364 - { 365 - struct can_priv *priv = netdev_priv(dev); 366 - u32 ctrlmode_static = can_get_static_ctrlmode(priv); 367 - 368 - /* Do not allow changing the MTU while running */ 369 - if (dev->flags & IFF_UP) 370 - return -EBUSY; 371 - 372 - /* allow change of MTU according to the CANFD ability of the device */ 373 - switch (new_mtu) { 374 - case CAN_MTU: 375 - /* 'CANFD-only' controllers can not switch to CAN_MTU */ 376 - if (ctrlmode_static & CAN_CTRLMODE_FD) 377 - return -EINVAL; 378 - 379 - priv->ctrlmode &= ~CAN_CTRLMODE_FD; 380 - break; 381 - 382 - case CANFD_MTU: 383 - /* check for potential CANFD ability */ 384 - if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD) && 385 - !(ctrlmode_static & CAN_CTRLMODE_FD)) 386 - return -EINVAL; 387 - 388 - priv->ctrlmode |= CAN_CTRLMODE_FD; 389 - break; 390 - 391 - default: 392 - return -EINVAL; 393 - } 394 - 395 - WRITE_ONCE(dev->mtu, new_mtu); 396 - return 0; 397 - } 398 - EXPORT_SYMBOL_GPL(can_change_mtu); 399 - 400 362 /* helper to define static CAN controller features at device creation time */ 401 363 int can_set_static_ctrlmode(struct net_device *dev, u32 static_mode) 402 364 {
-1
drivers/net/can/esd/esd_402_pci-core.c
··· 86 86 .ndo_open = acc_open, 87 87 .ndo_stop = acc_close, 88 88 .ndo_start_xmit = acc_start_xmit, 89 - .ndo_change_mtu = can_change_mtu, 90 89 .ndo_eth_ioctl = can_eth_ioctl_hwts, 91 90 }; 92 91
-1
drivers/net/can/flexcan/flexcan-core.c
··· 1867 1867 .ndo_open = flexcan_open, 1868 1868 .ndo_stop = flexcan_close, 1869 1869 .ndo_start_xmit = flexcan_start_xmit, 1870 - .ndo_change_mtu = can_change_mtu, 1871 1870 }; 1872 1871 1873 1872 static int register_flexcandev(struct net_device *dev)
-1
drivers/net/can/grcan.c
··· 1561 1561 .ndo_open = grcan_open, 1562 1562 .ndo_stop = grcan_close, 1563 1563 .ndo_start_xmit = grcan_start_xmit, 1564 - .ndo_change_mtu = can_change_mtu, 1565 1564 }; 1566 1565 1567 1566 static const struct ethtool_ops grcan_ethtool_ops = {
-1
drivers/net/can/ifi_canfd/ifi_canfd.c
··· 944 944 .ndo_open = ifi_canfd_open, 945 945 .ndo_stop = ifi_canfd_close, 946 946 .ndo_start_xmit = ifi_canfd_start_xmit, 947 - .ndo_change_mtu = can_change_mtu, 948 947 }; 949 948 950 949 static const struct ethtool_ops ifi_canfd_ethtool_ops = {
-1
drivers/net/can/janz-ican3.c
··· 1752 1752 .ndo_open = ican3_open, 1753 1753 .ndo_stop = ican3_stop, 1754 1754 .ndo_start_xmit = ican3_xmit, 1755 - .ndo_change_mtu = can_change_mtu, 1756 1755 }; 1757 1756 1758 1757 static const struct ethtool_ops ican3_ethtool_ops = {
-1
drivers/net/can/kvaser_pciefd/kvaser_pciefd_core.c
··· 904 904 .ndo_stop = kvaser_pciefd_stop, 905 905 .ndo_eth_ioctl = can_eth_ioctl_hwts, 906 906 .ndo_start_xmit = kvaser_pciefd_start_xmit, 907 - .ndo_change_mtu = can_change_mtu, 908 907 }; 909 908 910 909 static int kvaser_pciefd_set_phys_id(struct net_device *netdev,
-1
drivers/net/can/m_can/m_can.c
··· 2148 2148 .ndo_open = m_can_open, 2149 2149 .ndo_stop = m_can_close, 2150 2150 .ndo_start_xmit = m_can_start_xmit, 2151 - .ndo_change_mtu = can_change_mtu, 2152 2151 }; 2153 2152 2154 2153 static int m_can_get_coalesce(struct net_device *dev,
-1
drivers/net/can/mscan/mscan.c
··· 607 607 .ndo_open = mscan_open, 608 608 .ndo_stop = mscan_close, 609 609 .ndo_start_xmit = mscan_start_xmit, 610 - .ndo_change_mtu = can_change_mtu, 611 610 }; 612 611 613 612 static const struct ethtool_ops mscan_ethtool_ops = {
-1
drivers/net/can/peak_canfd/peak_canfd.c
··· 773 773 .ndo_stop = peak_canfd_close, 774 774 .ndo_eth_ioctl = peak_eth_ioctl, 775 775 .ndo_start_xmit = peak_canfd_start_xmit, 776 - .ndo_change_mtu = can_change_mtu, 777 776 }; 778 777 779 778 static int peak_get_ts_info(struct net_device *dev,
-1
drivers/net/can/rcar/rcar_can.c
··· 635 635 .ndo_open = rcar_can_open, 636 636 .ndo_stop = rcar_can_close, 637 637 .ndo_start_xmit = rcar_can_start_xmit, 638 - .ndo_change_mtu = can_change_mtu, 639 638 }; 640 639 641 640 static const struct ethtool_ops rcar_can_ethtool_ops = {
-1
drivers/net/can/rcar/rcar_canfd.c
··· 1818 1818 .ndo_open = rcar_canfd_open, 1819 1819 .ndo_stop = rcar_canfd_close, 1820 1820 .ndo_start_xmit = rcar_canfd_start_xmit, 1821 - .ndo_change_mtu = can_change_mtu, 1822 1821 }; 1823 1822 1824 1823 static const struct ethtool_ops rcar_canfd_ethtool_ops = {
-1
drivers/net/can/rockchip/rockchip_canfd-core.c
··· 761 761 .ndo_open = rkcanfd_open, 762 762 .ndo_stop = rkcanfd_stop, 763 763 .ndo_start_xmit = rkcanfd_start_xmit, 764 - .ndo_change_mtu = can_change_mtu, 765 764 }; 766 765 767 766 static int __maybe_unused rkcanfd_runtime_suspend(struct device *dev)
-1
drivers/net/can/sja1000/sja1000.c
··· 697 697 .ndo_open = sja1000_open, 698 698 .ndo_stop = sja1000_close, 699 699 .ndo_start_xmit = sja1000_start_xmit, 700 - .ndo_change_mtu = can_change_mtu, 701 700 }; 702 701 703 702 static const struct ethtool_ops sja1000_ethtool_ops = {
-1
drivers/net/can/slcan/slcan-core.c
··· 774 774 .ndo_open = slcan_netdev_open, 775 775 .ndo_stop = slcan_netdev_close, 776 776 .ndo_start_xmit = slcan_netdev_xmit, 777 - .ndo_change_mtu = can_change_mtu, 778 777 }; 779 778 780 779 /******************************************
-1
drivers/net/can/softing/softing_main.c
··· 609 609 .ndo_open = softing_netdev_open, 610 610 .ndo_stop = softing_netdev_stop, 611 611 .ndo_start_xmit = softing_netdev_start_xmit, 612 - .ndo_change_mtu = can_change_mtu, 613 612 }; 614 613 615 614 static const struct ethtool_ops softing_ethtool_ops = {
-1
drivers/net/can/spi/hi311x.c
··· 799 799 .ndo_open = hi3110_open, 800 800 .ndo_stop = hi3110_stop, 801 801 .ndo_start_xmit = hi3110_hard_start_xmit, 802 - .ndo_change_mtu = can_change_mtu, 803 802 }; 804 803 805 804 static const struct ethtool_ops hi3110_ethtool_ops = {
-1
drivers/net/can/spi/mcp251x.c
··· 1270 1270 .ndo_open = mcp251x_open, 1271 1271 .ndo_stop = mcp251x_stop, 1272 1272 .ndo_start_xmit = mcp251x_hard_start_xmit, 1273 - .ndo_change_mtu = can_change_mtu, 1274 1273 }; 1275 1274 1276 1275 static const struct ethtool_ops mcp251x_ethtool_ops = {
-1
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
··· 1715 1715 .ndo_stop = mcp251xfd_stop, 1716 1716 .ndo_start_xmit = mcp251xfd_start_xmit, 1717 1717 .ndo_eth_ioctl = can_eth_ioctl_hwts, 1718 - .ndo_change_mtu = can_change_mtu, 1719 1718 }; 1720 1719 1721 1720 static void
-1
drivers/net/can/sun4i_can.c
··· 768 768 .ndo_open = sun4ican_open, 769 769 .ndo_stop = sun4ican_close, 770 770 .ndo_start_xmit = sun4ican_start_xmit, 771 - .ndo_change_mtu = can_change_mtu, 772 771 }; 773 772 774 773 static const struct ethtool_ops sun4ican_ethtool_ops = {
-1
drivers/net/can/ti_hecc.c
··· 829 829 .ndo_open = ti_hecc_open, 830 830 .ndo_stop = ti_hecc_close, 831 831 .ndo_start_xmit = ti_hecc_xmit, 832 - .ndo_change_mtu = can_change_mtu, 833 832 }; 834 833 835 834 static const struct ethtool_ops ti_hecc_ethtool_ops = {
-1
drivers/net/can/usb/ems_usb.c
··· 885 885 .ndo_open = ems_usb_open, 886 886 .ndo_stop = ems_usb_close, 887 887 .ndo_start_xmit = ems_usb_start_xmit, 888 - .ndo_change_mtu = can_change_mtu, 889 888 }; 890 889 891 890 static const struct ethtool_ops ems_usb_ethtool_ops = {
-1
drivers/net/can/usb/esd_usb.c
··· 1011 1011 .ndo_open = esd_usb_open, 1012 1012 .ndo_stop = esd_usb_close, 1013 1013 .ndo_start_xmit = esd_usb_start_xmit, 1014 - .ndo_change_mtu = can_change_mtu, 1015 1014 }; 1016 1015 1017 1016 static const struct ethtool_ops esd_usb_ethtool_ops = {
-1
drivers/net/can/usb/etas_es58x/es58x_core.c
··· 1977 1977 .ndo_stop = es58x_stop, 1978 1978 .ndo_start_xmit = es58x_start_xmit, 1979 1979 .ndo_eth_ioctl = can_eth_ioctl_hwts, 1980 - .ndo_change_mtu = can_change_mtu, 1981 1980 }; 1982 1981 1983 1982 static const struct ethtool_ops es58x_ethtool_ops = {
-1
drivers/net/can/usb/f81604.c
··· 1052 1052 .ndo_open = f81604_open, 1053 1053 .ndo_stop = f81604_close, 1054 1054 .ndo_start_xmit = f81604_start_xmit, 1055 - .ndo_change_mtu = can_change_mtu, 1056 1055 }; 1057 1056 1058 1057 static const struct can_bittiming_const f81604_bittiming_const = {
-1
drivers/net/can/usb/gs_usb.c
··· 1101 1101 .ndo_open = gs_can_open, 1102 1102 .ndo_stop = gs_can_close, 1103 1103 .ndo_start_xmit = gs_can_start_xmit, 1104 - .ndo_change_mtu = can_change_mtu, 1105 1104 .ndo_eth_ioctl = gs_can_eth_ioctl, 1106 1105 }; 1107 1106
-1
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
··· 786 786 .ndo_stop = kvaser_usb_close, 787 787 .ndo_eth_ioctl = can_eth_ioctl_hwts, 788 788 .ndo_start_xmit = kvaser_usb_start_xmit, 789 - .ndo_change_mtu = can_change_mtu, 790 789 }; 791 790 792 791 static const struct ethtool_ops kvaser_usb_ethtool_ops = {
-1
drivers/net/can/usb/mcba_usb.c
··· 761 761 .ndo_open = mcba_usb_open, 762 762 .ndo_stop = mcba_usb_close, 763 763 .ndo_start_xmit = mcba_usb_start_xmit, 764 - .ndo_change_mtu = can_change_mtu, 765 764 }; 766 765 767 766 static const struct ethtool_ops mcba_ethtool_ops = {
-1
drivers/net/can/usb/nct6694_canfd.c
··· 690 690 .ndo_open = nct6694_canfd_open, 691 691 .ndo_stop = nct6694_canfd_close, 692 692 .ndo_start_xmit = nct6694_canfd_start_xmit, 693 - .ndo_change_mtu = can_change_mtu, 694 693 }; 695 694 696 695 static const struct ethtool_ops nct6694_canfd_ethtool_ops = {
-1
drivers/net/can/usb/peak_usb/pcan_usb_core.c
··· 814 814 .ndo_stop = peak_usb_ndo_stop, 815 815 .ndo_eth_ioctl = peak_eth_ioctl, 816 816 .ndo_start_xmit = peak_usb_ndo_start_xmit, 817 - .ndo_change_mtu = can_change_mtu, 818 817 }; 819 818 820 819 /* CAN-USB devices generally handle 32-bit CAN channel IDs.
-1
drivers/net/can/usb/ucan.c
··· 1233 1233 .ndo_open = ucan_open, 1234 1234 .ndo_stop = ucan_close, 1235 1235 .ndo_start_xmit = ucan_start_xmit, 1236 - .ndo_change_mtu = can_change_mtu, 1237 1236 }; 1238 1237 1239 1238 static const struct ethtool_ops ucan_ethtool_ops = {
-1
drivers/net/can/usb/usb_8dev.c
··· 868 868 .ndo_open = usb_8dev_open, 869 869 .ndo_stop = usb_8dev_close, 870 870 .ndo_start_xmit = usb_8dev_start_xmit, 871 - .ndo_change_mtu = can_change_mtu, 872 871 }; 873 872 874 873 static const struct ethtool_ops usb_8dev_ethtool_ops = {
-1
drivers/net/can/xilinx_can.c
··· 1702 1702 .ndo_open = xcan_open, 1703 1703 .ndo_stop = xcan_close, 1704 1704 .ndo_start_xmit = xcan_start_xmit, 1705 - .ndo_change_mtu = can_change_mtu, 1706 1705 }; 1707 1706 1708 1707 static const struct ethtool_ops xcan_ethtool_ops = {
-1
include/linux/can/dev.h
··· 127 127 int open_candev(struct net_device *dev); 128 128 void close_candev(struct net_device *dev); 129 129 void can_set_default_mtu(struct net_device *dev); 130 - int can_change_mtu(struct net_device *dev, int new_mtu); 131 130 int __must_check can_set_static_ctrlmode(struct net_device *dev, 132 131 u32 static_mode); 133 132 int can_eth_ioctl_hwts(struct net_device *netdev, struct ifreq *ifr, int cmd);