1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- From 63776a20617d4a5ffa5abd35d1d531892a347f36 Mon Sep 17 00:00:00 2001
- From: Dave Stevenson <[email protected]>
- Date: Wed, 13 Jun 2018 15:21:10 +0100
- Subject: [PATCH] net: lan78xx: Disable TCP Segmentation Offload (TSO)
- TSO seems to be having issues when packets are dropped and the
- remote end uses Selective Acknowledge (SACK) to denote that
- data is missing. The missing data is never resent, so the
- connection eventually stalls.
- There is a module parameter of enable_tso added to allow
- further debugging without forcing a rebuild of the kernel.
- https://github.com/raspberrypi/linux/issues/2449
- https://github.com/raspberrypi/linux/issues/2482
- Signed-off-by: Dave Stevenson <[email protected]>
- ---
- drivers/net/usb/lan78xx.c | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
- --- a/drivers/net/usb/lan78xx.c
- +++ b/drivers/net/usb/lan78xx.c
- @@ -609,6 +609,15 @@ static int lan78xx_alloc_tx_resources(st
- dev->n_tx_urbs, dev->tx_urb_size, dev);
- }
-
- +/* TSO seems to be having some issue with Selective Acknowledge (SACK) that
- + * results in lost data never being retransmitted.
- + * Disable it by default now, but adds a module parameter to enable it for
- + * debug purposes (the full cause is not currently understood).
- + */
- +static bool enable_tso;
- +module_param(enable_tso, bool, 0644);
- +MODULE_PARM_DESC(enable_tso, "Enables TCP segmentation offload");
- +
- static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
- {
- u32 *buf;
- @@ -3471,8 +3480,14 @@ static int lan78xx_bind(struct lan78xx_n
- if (DEFAULT_RX_CSUM_ENABLE)
- dev->net->features |= NETIF_F_RXCSUM;
-
- - if (DEFAULT_TSO_CSUM_ENABLE)
- - dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
- + if (DEFAULT_TSO_CSUM_ENABLE) {
- + dev->net->features |= NETIF_F_SG;
- + /* Use module parameter to control TCP segmentation offload as
- + * it appears to cause issues.
- + */
- + if (enable_tso)
- + dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6;
- + }
-
- if (DEFAULT_VLAN_RX_OFFLOAD)
- dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX;
|