Commit 0a76b56e authored by Dave Stevenson's avatar Dave Stevenson Committed by Phil Elwell
Browse files

net: lan78xx: Reduce s/w csum check on VLANs



With HW_VLAN_CTAG_RX enabled we don't observe the checksum
issue, so amend the workaround to only drop back to s/w
checksums if VLAN offload is disabled.

See #2458.

Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.org>
parent 3a3fab31
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -2985,12 +2985,13 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
				    struct sk_buff *skb,
				    u32 rx_cmd_a, u32 rx_cmd_b)
{
	/* Checksum offload appears to be flawed if used with VLANs.
	 * Elect for sw checksum check instead.
	/* HW Checksum offload appears to be flawed if used when not stripping
	 * VLAN headers.
	 */
	if (!(dev->net->features & NETIF_F_RXCSUM) ||
	    unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
	    (rx_cmd_a & RX_CMD_A_FVTG_)) {
	    ((rx_cmd_a & RX_CMD_A_FVTG_) &&
	     !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
		skb->ip_summed = CHECKSUM_NONE;
	} else {
		skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_));