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

Configure Feed

Select the types of activity you want to include in your feed.

net: mark deliver_skb() as unlikely and not inlined

deliver_skb() should not be inlined as is it not called
in the fast path.

Add unlikely() clauses giving hints to the compiler about this fact.

Before this patch:

size net/core/dev.o
text data bss dec hex filename
121794 13330 176 135300 21084 net/core/dev.o

__netif_receive_skb_core() size on x86_64 : 4080 bytes.

After:

size net/core/dev.o
text data bss dec hex filenamee
120330 13338 176 133844 20ad4 net/core/dev.o

__netif_receive_skb_core() size on x86_64 : 2781 bytes.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20251103165256.1712169-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Eric Dumazet and committed by
Jakub Kicinski
46173144 105bae32

+11 -11
+11 -11
net/core/dev.c
··· 2463 2463 return __dev_forward_skb2(dev, skb, false) ?: netif_rx_internal(skb); 2464 2464 } 2465 2465 2466 - static inline int deliver_skb(struct sk_buff *skb, 2467 - struct packet_type *pt_prev, 2468 - struct net_device *orig_dev) 2466 + static int deliver_skb(struct sk_buff *skb, 2467 + struct packet_type *pt_prev, 2468 + struct net_device *orig_dev) 2469 2469 { 2470 2470 if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC))) 2471 2471 return -ENOMEM; ··· 2484 2484 list_for_each_entry_rcu(ptype, ptype_list, list) { 2485 2485 if (ptype->type != type) 2486 2486 continue; 2487 - if (pt_prev) 2487 + if (unlikely(pt_prev)) 2488 2488 deliver_skb(skb, pt_prev, orig_dev); 2489 2489 pt_prev = ptype; 2490 2490 } ··· 2545 2545 if (skb_loop_sk(ptype, skb)) 2546 2546 continue; 2547 2547 2548 - if (pt_prev) { 2548 + if (unlikely(pt_prev)) { 2549 2549 deliver_skb(skb2, pt_prev, skb->dev); 2550 2550 pt_prev = ptype; 2551 2551 continue; ··· 4421 4421 return skb; 4422 4422 4423 4423 bpf_net_ctx = bpf_net_ctx_set(&__bpf_net_ctx); 4424 - if (*pt_prev) { 4424 + if (unlikely(*pt_prev)) { 4425 4425 *ret = deliver_skb(skb, *pt_prev, orig_dev); 4426 4426 *pt_prev = NULL; 4427 4427 } ··· 5883 5883 if (nf_hook_ingress_active(skb)) { 5884 5884 int ingress_retval; 5885 5885 5886 - if (*pt_prev) { 5886 + if (unlikely(*pt_prev)) { 5887 5887 *ret = deliver_skb(skb, *pt_prev, orig_dev); 5888 5888 *pt_prev = NULL; 5889 5889 } ··· 5960 5960 5961 5961 list_for_each_entry_rcu(ptype, &dev_net_rcu(skb->dev)->ptype_all, 5962 5962 list) { 5963 - if (pt_prev) 5963 + if (unlikely(pt_prev)) 5964 5964 ret = deliver_skb(skb, pt_prev, orig_dev); 5965 5965 pt_prev = ptype; 5966 5966 } 5967 5967 5968 5968 list_for_each_entry_rcu(ptype, &skb->dev->ptype_all, list) { 5969 - if (pt_prev) 5969 + if (unlikely(pt_prev)) 5970 5970 ret = deliver_skb(skb, pt_prev, orig_dev); 5971 5971 pt_prev = ptype; 5972 5972 } ··· 5997 5997 } 5998 5998 5999 5999 if (skb_vlan_tag_present(skb)) { 6000 - if (pt_prev) { 6000 + if (unlikely(pt_prev)) { 6001 6001 ret = deliver_skb(skb, pt_prev, orig_dev); 6002 6002 pt_prev = NULL; 6003 6003 } ··· 6009 6009 6010 6010 rx_handler = rcu_dereference(skb->dev->rx_handler); 6011 6011 if (rx_handler) { 6012 - if (pt_prev) { 6012 + if (unlikely(pt_prev)) { 6013 6013 ret = deliver_skb(skb, pt_prev, orig_dev); 6014 6014 pt_prev = NULL; 6015 6015 }