099f702f00556593be29ab64bb3dc1c6e626df9d
[openwrt/staging/lynxis.git] / target / linux / brcm2708 / patches-4.14 / 950-0272-net-lan78xx-Reduce-s-w-csum-check-on-VLANs.patch
1 From 126c6760f56d2d7a82c605a54c402a886ae9b5bf Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dave.stevenson@raspberrypi.org>
3 Date: Tue, 10 Apr 2018 13:08:36 +0100
4 Subject: [PATCH 272/454] net: lan78xx: Reduce s/w csum check on VLANs
5
6 With HW_VLAN_CTAG_RX enabled we don't observe the checksum
7 issue, so amend the workaround to only drop back to s/w
8 checksums if VLAN offload is disabled.
9
10 See #2458.
11
12 Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
13 ---
14 drivers/net/usb/lan78xx.c | 7 ++++---
15 1 file changed, 4 insertions(+), 3 deletions(-)
16
17 --- a/drivers/net/usb/lan78xx.c
18 +++ b/drivers/net/usb/lan78xx.c
19 @@ -2968,12 +2968,13 @@ static void lan78xx_rx_csum_offload(stru
20 struct sk_buff *skb,
21 u32 rx_cmd_a, u32 rx_cmd_b)
22 {
23 - /* Checksum offload appears to be flawed if used with VLANs.
24 - * Elect for sw checksum check instead.
25 + /* HW Checksum offload appears to be flawed if used when not stripping
26 + * VLAN headers.
27 */
28 if (!(dev->net->features & NETIF_F_RXCSUM) ||
29 unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
30 - (rx_cmd_a & RX_CMD_A_FVTG_)) {
31 + ((rx_cmd_a & RX_CMD_A_FVTG_) &&
32 + !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
33 skb->ip_summed = CHECKSUM_NONE;
34 } else {
35 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));