This is a note to let you know that I've just added the patch titled
tg3: Work around HW/FW limitations with vlan encapsulated frames
to the 3.14-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:
tg3-work-around-hw-fw-limitations-with-vlan-encapsulated-frames.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.
>From foo@baz Sun Oct 12 16:38:53 CEST 2014
From: Vlad Yasevich <[email protected]>
Date: Thu, 18 Sep 2014 10:31:17 -0400
Subject: tg3: Work around HW/FW limitations with vlan encapsulated frames
From: Vlad Yasevich <[email protected]>
[ Upstream commit 476c18850c6cbaa3f2bb661ae9710645081563b9 ]
TG3 appears to have an issue performing TSO and checksum offloading
correclty when the frame has been vlan encapsulated (non-accelrated).
In these cases, tcp checksum is not correctly updated.
This patch attempts to work around this issue. After the patch,
802.1ad vlans start working correctly over tg3 devices.
CC: Prashant Sreedharan <[email protected]>
CC: Michael Chan <[email protected]>
Signed-off-by: Vladislav Yasevich <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
drivers/net/ethernet/broadcom/tg3.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -7915,8 +7915,6 @@ static netdev_tx_t tg3_start_xmit(struct
entry = tnapi->tx_prod;
base_flags = 0;
- if (skb->ip_summed == CHECKSUM_PARTIAL)
- base_flags |= TXD_FLAG_TCPUDP_CSUM;
mss = skb_shinfo(skb)->gso_size;
if (mss) {
@@ -7932,6 +7930,13 @@ static netdev_tx_t tg3_start_xmit(struct
hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) -
ETH_HLEN;
+ /* HW/FW can not correctly segment packets that have been
+ * vlan encapsulated.
+ */
+ if (skb->protocol == htons(ETH_P_8021Q) ||
+ skb->protocol == htons(ETH_P_8021AD))
+ return tg3_tso_bug(tp, skb);
+
if (!skb_is_gso_v6(skb)) {
iph->check = 0;
iph->tot_len = htons(mss + hdr_len);
@@ -7978,6 +7983,17 @@ static netdev_tx_t tg3_start_xmit(struct
base_flags |= tsflags << 12;
}
}
+ } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
+ /* HW/FW can not correctly checksum packets that have been
+ * vlan encapsulated.
+ */
+ if (skb->protocol == htons(ETH_P_8021Q) ||
+ skb->protocol == htons(ETH_P_8021AD)) {
+ if (skb_checksum_help(skb))
+ goto drop;
+ } else {
+ base_flags |= TXD_FLAG_TCPUDP_CSUM;
+ }
}
if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/macvtap-fix-race-between-device-delete-and-open.patch
queue-3.14/bridge-fix-br_should_learn-to-check-vlan_enabled.patch
queue-3.14/tg3-work-around-hw-fw-limitations-with-vlan-encapsulated-frames.patch
queue-3.14/bridge-check-if-vlan-filtering-is-enabled-only-once.patch
queue-3.14/tg3-allow-for-recieve-of-full-size-8021ad-frames.patch
queue-3.14/sctp-handle-association-restarts-when-the-socket-is-closed.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html