]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: advance skb_defer_disable_key check in napi_consume_skb
authorJason Xing <kernelxing@tencent.com>
Thu, 2 Apr 2026 03:41:14 +0000 (11:41 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 7 Apr 2026 01:32:04 +0000 (18:32 -0700)
When net.core.skb_defer_max is adjusted to zero, napi_consume_skb()
shouldn't go into that deeper in skb_attempt_defer_free() because it adds
an additional pair of local_bh_enable/disable() which is evidently not
needed. Advancing the check of the static key saves more cycles and
benefits non defer case.

Signed-off-by: Jason Xing <kernelxing@tencent.com>
Link: https://patch.msgid.link/20260402034114.65766-1-kerneljasonxing@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/skbuff.c

index 3d6978dd0aa83f63984b994359d0c914c6427a00..4045d7c484a14ec8d12d29c6b5f4a820a4e932d1 100644 (file)
@@ -94,6 +94,7 @@
 
 #include "dev.h"
 #include "devmem.h"
+#include "net-sysfs.h"
 #include "netmem_priv.h"
 #include "sock_destructor.h"
 
@@ -1519,7 +1520,8 @@ void napi_consume_skb(struct sk_buff *skb, int budget)
 
        DEBUG_NET_WARN_ON_ONCE(!in_softirq());
 
-       if (skb->alloc_cpu != smp_processor_id() && !skb_shared(skb)) {
+       if (!static_branch_unlikely(&skb_defer_disable_key) &&
+           skb->alloc_cpu != smp_processor_id() && !skb_shared(skb)) {
                skb_release_head_state(skb);
                return skb_attempt_defer_free(skb);
        }