Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Alexander Lobakin and committed by
David S. Miller
86af2c82 e75ec151

+8
+8
include/net/gro.h
··· 14 14 INDIRECT_CALLABLE_DECLARE(struct sk_buff *inet_gro_receive(struct list_head *, 15 15 struct sk_buff *)); 16 16 INDIRECT_CALLABLE_DECLARE(int inet_gro_complete(struct sk_buff *, int)); 17 + 18 + #define indirect_call_gro_receive_inet(cb, f2, f1, head, skb) \ 19 + ({ \ 20 + unlikely(gro_recursion_inc_test(skb)) ? \ 21 + NAPI_GRO_CB(skb)->flush |= 1, NULL : \ 22 + INDIRECT_CALL_INET(cb, f2, f1, head, skb); \ 23 + }) 24 + 17 25 #endif /* _NET_IPV6_GRO_H */