summaryrefslogtreecommitdiffstats
path: root/include/net/gro.h
diff options
context:
space:
mode:
authorAlexander Lobakin <alobakin@pm.me>2021-03-18 19:42:30 +0100
committerDavid S. Miller <davem@davemloft.net>2021-03-19 03:51:12 +0100
commit86af2c82c28499b4b509d6b15637a96bd829201b (patch)
tree2b18b57281cfc421c6f7ca302314a17a5a55670c /include/net/gro.h
parentgro: make net/gro.h self-contained (diff)
downloadlinux-86af2c82c28499b4b509d6b15637a96bd829201b.tar.xz
linux-86af2c82c28499b4b509d6b15637a96bd829201b.zip
gro: add combined call_gro_receive() + INDIRECT_CALL_INET() helper
call_gro_receive() is used to limit GRO recursion, but it works only with callback pointers. There's a combined version of call_gro_receive() + INDIRECT_CALL_2() in <net/inet_common.h>, but it doesn't check for IPv6 modularity. Add a similar new helper to cover both of these. It can and will be used to avoid retpoline overhead when IP header lies behind another offloaded proto. Signed-off-by: Alexander Lobakin <alobakin@pm.me> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/gro.h')
-rw-r--r--include/net/gro.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/net/gro.h b/include/net/gro.h
index 27c38b36df16..01edaf3fdda0 100644
--- a/include/net/gro.h
+++ b/include/net/gro.h
@@ -14,4 +14,12 @@ INDIRECT_CALLABLE_DECLARE(int ipv6_gro_complete(struct sk_buff *, int));
INDIRECT_CALLABLE_DECLARE(struct sk_buff *inet_gro_receive(struct list_head *,
struct sk_buff *));
INDIRECT_CALLABLE_DECLARE(int inet_gro_complete(struct sk_buff *, int));
+
+#define indirect_call_gro_receive_inet(cb, f2, f1, head, skb) \
+({ \
+ unlikely(gro_recursion_inc_test(skb)) ? \
+ NAPI_GRO_CB(skb)->flush |= 1, NULL : \
+ INDIRECT_CALL_INET(cb, f2, f1, head, skb); \
+})
+
#endif /* _NET_IPV6_GRO_H */