Message ID | 1533717990-25365-1-git-send-email-tariqt@mellanox.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: ipv6_gre: Fix GRO to work on IPv6 over GRE tap | expand |
From: Tariq Toukan <tariqt@mellanox.com> Date: Wed, 8 Aug 2018 11:46:30 +0300 > IPv6 GRO over GRE tap is not working while GRO is not set > over the native interface. ... > This patch removes the override of the hard_header_len, and > assigns the calculated value to needed_headroom. > This way, the comparison in gro_list_prepare is really of > the mac headers, and if the packets have the same mac headers > the same_flow will be set to 1. > > Performance testing: 45% higher bandwidth. > Measuring bandwidth of single-stream IPv4 TCP traffic over IPv6 > GRE tap while GRO is not set on the native. > NIC: ConnectX-4LX > Before (GRO not working) : 7.2 Gbits/sec > After (GRO working): 10.5 Gbits/sec > > Signed-off-by: Maria Pasechnik <mariap@mellanox.com> > Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Applied, thank you.
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index fc7dd3a04360..18a3794b0f52 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -1129,7 +1129,7 @@ static void ip6gre_tnl_link_config_route(struct ip6_tnl *t, int set_mtu, return; if (rt->dst.dev) { - dev->hard_header_len = rt->dst.dev->hard_header_len + + dev->needed_headroom = rt->dst.dev->hard_header_len + t_hlen; if (set_mtu) { @@ -1155,7 +1155,7 @@ static int ip6gre_calc_hlen(struct ip6_tnl *tunnel) tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen; t_hlen = tunnel->hlen + sizeof(struct ipv6hdr); - tunnel->dev->hard_header_len = LL_MAX_HEADER + t_hlen; + tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen; return t_hlen; } @@ -1825,7 +1825,7 @@ static int ip6erspan_calc_hlen(struct ip6_tnl *tunnel) erspan_hdr_len(tunnel->parms.erspan_ver); t_hlen = tunnel->hlen + sizeof(struct ipv6hdr); - tunnel->dev->hard_header_len = LL_MAX_HEADER + t_hlen; + tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen; return t_hlen; }