All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH V2] ixgbe: Handle extended IPv6 headers in tx path
@ 2015-11-17  0:26 Mark D Rustad
  2015-11-17  5:21 ` Tom Herbert
  0 siblings, 1 reply; 10+ messages in thread
From: Mark D Rustad @ 2015-11-17  0:26 UTC (permalink / raw)
  To: intel-wired-lan

Check for and handle IPv6 extended headers so that tx checksum
offload can be done. Thanks to Tom Herbert for noticing this
problem. Thanks to Alexander Duyck for recognizing problems with
the first version of this patch.

Reported-by: Tom Herbert <tom@herbertland.com>
Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
---
Changed in V2:
- Use ipv6_skip_exthdr instead of ipv6_find_hdr
- Move code into L3 processing and avoid any possible loop
- Handle encapsulated IPv6 extended headers correctly
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 1ffbe85eab7b..23f316a9ad5a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7229,6 +7229,8 @@ static void ixgbe_tx_csum(struct ixgbe_ring *tx_ring,
 			struct tcphdr *tcphdr;
 			u8 *raw;
 		} transport_hdr;
+		__be16 frag_off;
+		int rc;
 
 		if (skb->encapsulation) {
 			network_hdr.raw = skb_inner_network_header(skb);
@@ -7252,6 +7254,23 @@ static void ixgbe_tx_csum(struct ixgbe_ring *tx_ring,
 		case 6:
 			vlan_macip_lens |= transport_hdr.raw - network_hdr.raw;
 			l4_hdr = network_hdr.ipv6->nexthdr;
+			if (likely((transport_hdr.raw - network_hdr.raw) ==
+				   sizeof(struct ipv6hdr)))
+				break;
+			rc = ipv6_skip_exthdr(skb, network_hdr.raw +
+						   sizeof(struct ipv6hdr) -
+						   skb->data,
+					      &l4_hdr, &frag_off);
+			if (rc < 0) {
+				if (unlikely(net_ratelimit())) {
+					dev_warn(tx_ring->dev,
+						 "ipv6_skip_exthdr returned %d\n",
+						 rc);
+				}
+				break;
+			}
+			if (frag_off)
+				l4_hdr = 0;
 			break;
 		default:
 			if (unlikely(net_ratelimit())) {


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-11-17 19:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-17  0:26 [Intel-wired-lan] [PATCH V2] ixgbe: Handle extended IPv6 headers in tx path Mark D Rustad
2015-11-17  5:21 ` Tom Herbert
2015-11-17 16:41   ` Alexander Duyck
2015-11-17 16:48     ` Tom Herbert
2015-11-17 17:01       ` Alexander Duyck
2015-11-17 18:09         ` Rustad, Mark D
2015-11-17 18:22           ` Tom Herbert
2015-11-17 19:02             ` Rustad, Mark D
2015-11-17 19:11               ` Tom Herbert
2015-11-17 19:29                 ` Rustad, Mark D

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.