[source] ixp4xx: drop the jumbo frame support

LEDE Commits lede-commits at lists.infradead.org
Mon Nov 6 07:39:55 PST 2017


blogic pushed a commit to source.git, branch master:
https://git.lede-project.org/890e668273745a298938c4abb39c5e5804c0cdd5

commit 890e668273745a298938c4abb39c5e5804c0cdd5
Author: Sergey Ryazanov <ryazanov.s.a at gmail.com>
AuthorDate: Mon Oct 16 02:31:19 2017 +0300

    ixp4xx: drop the jumbo frame support
    
    Current jumbo frame support code allocates rxbuffers of the maximum size
    supported by the hardware (~14KB). This happens at the device open time
    even if the configured MTU is lower (e.g. if it configured to standard
    1500 bytes). Such behavior effectivly prevents interface start on boards
    with a low ammount of RAM (e.g. WRT300N v2), since the kernel simly can
    not allocates of ~0.8MB (14KB x 64).
    
    So remove jumbo frame support for now.
    
    Reported-by: Nerijus Baliunas <nerijus at users.sourceforge.net>
    Tested-by: Nerijus Baliunas <nerijus at users.sourceforge.net>
    Signed-off-by: Sergey Ryazanov <ryazanov.s.a at gmail.com>
---
 .../patches-4.4/304-ixp4xx_eth_jumboframe.patch    | 80 ----------------------
 1 file changed, 80 deletions(-)

diff --git a/target/linux/ixp4xx/patches-4.4/304-ixp4xx_eth_jumboframe.patch b/target/linux/ixp4xx/patches-4.4/304-ixp4xx_eth_jumboframe.patch
deleted file mode 100644
index b16086b..0000000
--- a/target/linux/ixp4xx/patches-4.4/304-ixp4xx_eth_jumboframe.patch
+++ /dev/null
@@ -1,80 +0,0 @@
---- a/drivers/net/ethernet/xscale/ixp4xx_eth.c
-+++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c
-@@ -57,7 +57,7 @@
- 
- #define POOL_ALLOC_SIZE		(sizeof(struct desc) * (RX_DESCS + TX_DESCS))
- #define REGS_SIZE		0x1000
--#define MAX_MRU			1536 /* 0x600 */
-+#define MAX_MRU			(14320 - ETH_HLEN - ETH_FCS_LEN)
- #define RX_BUFF_SIZE		ALIGN((NET_IP_ALIGN) + MAX_MRU, 4)
- 
- #define NAPI_WEIGHT		16
-@@ -1315,6 +1315,32 @@ static void destroy_queues(struct port *
- 	}
- }
- 
-+static int eth_do_change_mtu(struct net_device *dev, int mtu)
-+{
-+	struct port *port;
-+	struct msg msg;
-+	/* adjust for ethernet headers */
-+	int framesize = mtu + ETH_HLEN + ETH_FCS_LEN;
-+
-+	port = netdev_priv(dev);
-+
-+	memset(&msg, 0, sizeof(msg));
-+	msg.cmd = NPE_SETMAXFRAMELENGTHS;
-+	msg.eth_id = port->id;
-+
-+	/* max rx/tx 64 byte blocks */
-+	msg.byte2 = ((framesize + 63) / 64) << 8;
-+	msg.byte3 = ((framesize + 63) / 64) << 8;
-+
-+	msg.byte4 = msg.byte6 = framesize >> 8;
-+	msg.byte5 = msg.byte7 = framesize & 0xff;
-+
-+	if (npe_send_recv_message(port->npe, &msg, "ETH_SET_MAX_FRAME_LENGTH"))
-+		return -EIO;
-+
-+	return 0;
-+}
-+
- static int eth_open(struct net_device *dev)
- {
- 	struct port *port = netdev_priv(dev);
-@@ -1366,6 +1392,8 @@ static int eth_open(struct net_device *d
- 	if (npe_send_recv_message(port->npe, &msg, "ETH_SET_FIREWALL_MODE"))
- 		return -EIO;
- 
-+	eth_do_change_mtu(dev, dev->mtu);
-+
- 	if ((err = request_queues(port)) != 0)
- 		return err;
- 
-@@ -1505,7 +1533,26 @@ static int eth_close(struct net_device *
- 	return 0;
- }
- 
-+static int ixp_eth_change_mtu(struct net_device *dev, int mtu)
-+{
-+	int ret;
-+
-+	if (mtu > MAX_MRU)
-+		return -EINVAL;
-+
-+	if (dev->flags & IFF_UP) {
-+		ret = eth_do_change_mtu(dev, mtu);
-+		if (ret < 0)
-+			return ret;
-+	}
-+
-+	dev->mtu = mtu;
-+
-+	return 0;
-+}
-+
- static const struct net_device_ops ixp4xx_netdev_ops = {
-+	.ndo_change_mtu = ixp_eth_change_mtu,
- 	.ndo_open = eth_open,
- 	.ndo_stop = eth_close,
- 	.ndo_start_xmit = eth_xmit,



More information about the lede-commits mailing list