diff options
author | Paolo Abeni <pabeni@redhat.com> | 2021-07-28 18:24:02 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-07-29 12:18:12 +0100 |
commit | 9efb4b5baf6ce851b247288992b0632cb4d31c17 (patch) | |
tree | aab2e005f5c5566917a80cae3349dceae7d26572 /net/core/skbuff.c | |
parent | b0999f385ac30cb17880ae1c1512491fbf0c9542 (diff) |
net: optimize GRO for the common case.
After the previous patches, at GRO time, skb->slow_gro is
usually 0, unless the packets comes from some H/W offload
slowpath or tunnel.
We can optimize the GRO code assuming !skb->slow_gro is likely.
This remove multiple conditionals in the most common path, at the
price of an additional one when we hit the above "slow-paths".
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index c5b02edd8881..d04e286149cc 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -954,9 +954,12 @@ void __kfree_skb_defer(struct sk_buff *skb) void napi_skb_free_stolen_head(struct sk_buff *skb) { - nf_reset_ct(skb); - skb_dst_drop(skb); - skb_ext_put(skb); + if (unlikely(skb->slow_gro)) { + nf_reset_ct(skb); + skb_dst_drop(skb); + skb_ext_put(skb); + skb->slow_gro = 0; + } napi_skb_cache_put(skb); } |