Patch "net: mvneta: disable IP checksum with jumbo frames for Armada 370" has been added to the 4.1-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: mvneta: disable IP checksum with jumbo frames for Armada 370
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mvneta-disable-ip-checksum-with-jumbo-frames-for-armada-370.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Fri Jul 3 20:00:25 PDT 2015
From: Simon Guinot <[email protected]>
Date: Tue, 30 Jun 2015 16:20:22 +0200
Subject: net: mvneta: disable IP checksum with jumbo frames for Armada 370
From: Simon Guinot <[email protected]>
[ Upstream commit b65657fc240ae6c1d2a1e62db9a0e61ac9631d7a ]
The Ethernet controller found in the Armada 370, 380 and 385 SoCs don't support TCP/IP checksumming with frame sizes larger than 1600 bytes.
This patch fixes the issue by disabling the features NETIF_F_IP_CSUM and NETIF_F_TSO for the Armada 370 and compatibles SoCs when the MTU is set to a value greater than 1600 bytes.
--- drivers/net/ethernet/marvell/mvneta.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
drivers/net/ethernet/marvell/mvneta.c +25 -1
@@ -310,6 +310,7 @@ struct mvneta_port {unsigned int link;unsigned int duplex;unsigned int speed; +unsigned int tx_csum_limit; int use_inband_status:1; };
@@ -2508,8 +2509,10 @@ static int mvneta_change_mtu(struct net_ dev->mtu = mtu; -if (!netif_running (dev)) +if (!netif_running (dev)) { +netdev_update_features (dev);return 0 ; + }/* The interface is running, so we have to force a * reallocation of the queues
@@ -2538,9 +2541,26 @@ static int mvneta_change_mtu(struct net_mvneta_start_dev (pp);mvneta_port_up (pp); +netdev_update_features (dev); +return 0 ; } +static netdev_features_t mvneta_fix_features (struct net_device *dev, +netdev_features_t features) +{ +struct mvneta_port *pp =netdev_priv (dev); + +if (pp->tx_csum_limit && dev->mtu > pp->tx_csum_limit) { + features &= ~(NETIF_F_IP_CSUM |NETIF_F_TSO ); +netdev_info (dev, +"Disable IP checksum for MTU greater than %dB\n" , + pp->tx_csum_limit); + } + +return features; +} +/* Get mac address */ static void mvneta_get_mac_addr (struct mvneta_port *pp,unsigned char *addr) {
@@ -2862,6 +2882,7 @@ static const struct net_device_ops mvnet .ndo_set_rx_mode = mvneta_set_rx_mode, .ndo_set_mac_address = mvneta_set_mac_addr, .ndo_change_mtu = mvneta_change_mtu, + .ndo_fix_features = mvneta_fix_features, .ndo_get_stats64 = mvneta_get_stats64, .ndo_do_ioctl = mvneta_ioctl, };
@@ -3107,6 +3128,9 @@ static int mvneta_probe(struct platform_ } } +if (of_device_is_compatible (dn,"marvell,armada-370-neta" )) + pp->tx_csum_limit =1600 ; + pp->tx_ring_size =MVNETA_MAX_TXD ; pp->rx_ring_size =MVNETA_MAX_RXD ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/arm-mvebu-update-ethernet-compatible-string-for-armada-xp.patch queue-4.1/net-mvneta-disable-ip-checksum-with-jumbo-frames-for-armada-370.patch queue-4.1/net-mvneta-introduce-compatible-string-marvell-armada-xp-neta.patch