mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-18 19:21:38 -04:00
net: fclone allocation small optimization
After skb allocation, initial skb->fclone value is 0 (SKB_FCLONE_UNAVAILABLE) We can replace one RMW sequence with a single OR instruction. movzbl 0x7e(%r13),%eax // skb->fclone = SKB_FCLONE_ORIG; and $0xf3,%al or $0x4,%al mov %al,0x7e(%r13) -> or $0x4,0x7e(%r13) // skb->fclone |= SKB_FCLONE_ORIG; Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20260116164402.1872649-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
ee7be82f8c
commit
79bfa5fb85
@@ -723,7 +723,14 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
|
||||
|
||||
fclones = container_of(skb, struct sk_buff_fclones, skb1);
|
||||
|
||||
skb->fclone = SKB_FCLONE_ORIG;
|
||||
/* skb->fclone is a 2bits field.
|
||||
* Replace expensive RMW (skb->fclone = SKB_FCLONE_ORIG)
|
||||
* with a single OR.
|
||||
*/
|
||||
BUILD_BUG_ON(SKB_FCLONE_UNAVAILABLE != 0);
|
||||
DEBUG_NET_WARN_ON_ONCE(skb->fclone != SKB_FCLONE_UNAVAILABLE);
|
||||
skb->fclone |= SKB_FCLONE_ORIG;
|
||||
|
||||
refcount_set(&fclones->fclone_ref, 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user