All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <edumazet@google.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	 Jakub Kicinski <kuba@kernel.org>,
	Paolo Abeni <pabeni@redhat.com>,
	netdev@vger.kernel.org,  Eric Dumazet <edumazet@google.com>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	 "Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Marco Elver <elver@google.com>
Subject: [PATCH] locking/local_lock: Reduce local_[un]lock_nested_bh() overhead
Date: Mon,  9 Mar 2026 12:20:55 +0000	[thread overview]
Message-ID: <20260309122055.1226507-1-edumazet@google.com> (raw)

On !PREEMPT_RT and !LOCKDEP kernels, local_[un]lock_nested_bh()
are supposed to be NOP.

This is not exactly true after 7ff495e26a39 ("local_lock: Move
this_cpu_ptr() notation from internal to main header") due to
this_cpu_ptr() being evaluated even if its result it not used.

This prevents some tail call optimizations.

After this patch we have gains in networking fast paths:

$ scripts/bloat-o-meter -t vmlinux.0 vmlinux
add/remove: 0/0 grow/shrink: 0/36 up/down: 0/-644 (-644)
Function                                     old     new   delta
tcp_sigpool_end                               79      71      -8
skb_attempt_defer_free                       457     449      -8
ppp_xmit_process                             179     171      -8
ppp_write                                    411     403      -8
ppp_output_wakeup                            135     127      -8
napi_skb_cache_get_bulk                      440     432      -8
napi_consume_skb                             409     401      -8
dst_cache_set_ip6                            203     195      -8
dst_cache_set_ip4                            135     127      -8
cpu_map_enqueue                              193     185      -8
bq_enqueue                                   263     255      -8
__netdev_alloc_skb                           377     369      -8
__netdev_alloc_frag_align                    155     147      -8
__napi_kfree_skb                             136     128      -8
napi_skb_free_stolen_head                    199     190      -9
input_action_end_bpf                        1083    1072     -11
napi_alloc_skb                               275     263     -12
__napi_alloc_frag_align                       59      45     -14
xdp_build_skb_from_zc                        590     574     -16
tcp_v4_send_ack                             1129    1113     -16
sch_frag_xmit_hook                          1260    1244     -16
flush_backlog                                507     491     -16
dst_cache_get_ip6                             99      83     -16
dst_cache_get_ip4                             90      74     -16
do_xdp_generic                               932     916     -16
__napi_build_skb                             591     575     -16
__dev_flush                                  115      99     -16
__cpu_map_flush                               85      69     -16
dst_cache_get                                 55      38     -17
tcp_v4_send_reset                           2682    2658     -24
mptcp_subflow_delegate                       955     931     -24
__alloc_skb                                  988     964     -24
mptcp_napi_poll                              310     281     -29
nat_keepalive_work_single                   1385    1335     -50
gro_cells_receive                            320     244     -76
process_backlog                              486     404     -82
Total: Before=25812320, After=25811676, chg -0.00%

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Marco Elver <elver@google.com>
---
 include/linux/local_lock.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/linux/local_lock.h b/include/linux/local_lock.h
index b8830148a8591c17c22e36470fbc13ff5c354955..40c2da54a0b720265be7b6327e0922a49befd8fc 100644
--- a/include/linux/local_lock.h
+++ b/include/linux/local_lock.h
@@ -94,12 +94,19 @@ DEFINE_LOCK_GUARD_1(local_lock_irqsave, local_lock_t __percpu,
 		    local_unlock_irqrestore(_T->lock, _T->flags),
 		    unsigned long flags)
 
+#if defined(WARN_CONTEXT_ANALYSIS) || defined(CONFIG_PREEMPT_RT) || \
+    defined(CONFIG_DEBUG_LOCK_ALLOC)
 #define local_lock_nested_bh(_lock)				\
 	__local_lock_nested_bh(__this_cpu_local_lock(_lock))
 
 #define local_unlock_nested_bh(_lock)				\
 	__local_unlock_nested_bh(__this_cpu_local_lock(_lock))
 
+#else
+static inline void local_lock_nested_bh(local_lock_t *_lock) {}
+static inline void local_unlock_nested_bh(local_lock_t *__lock) {}
+#endif
+
 DEFINE_LOCK_GUARD_1(local_lock_nested_bh, local_lock_t __percpu,
 		    local_lock_nested_bh(_T->lock),
 		    local_unlock_nested_bh(_T->lock))

base-commit: 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681
prerequisite-patch-id: f6002c357582927a383603a22e69bc0d7a5b9528
-- 
2.53.0.473.g4a7958ca14-goog


             reply	other threads:[~2026-03-09 12:21 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-09 12:20 Eric Dumazet [this message]
2026-03-09 13:43 ` [PATCH] locking/local_lock: Reduce local_[un]lock_nested_bh() overhead Peter Zijlstra
2026-03-09 13:49   ` Eric Dumazet
2026-03-09 14:05     ` Marco Elver
2026-03-09 14:11       ` Eric Dumazet
2026-03-09 14:03   ` Eric Dumazet
2026-03-09 14:18     ` Eric Dumazet
2026-03-09 14:52       ` Eric Dumazet
2026-03-11 15:55         ` Sebastian Andrzej Siewior
2026-03-11 16:32           ` Uros Bizjak
2026-03-11 16:45             ` Uros Bizjak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260309122055.1226507-1-edumazet@google.com \
    --to=edumazet@google.com \
    --cc=bigeasy@linutronix.de \
    --cc=elver@google.com \
    --cc=eric.dumazet@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.