diff mbox series

[net-next] net: Revert the softirq will run annotation in ____napi_schedule().

Message ID YjhD3ZKWysyw8rc6@linutronix.de (mailing list archive)
State Accepted
Commit 351bdbb6419ca988802882badadc321d384d0254
Delegated to: Netdev Maintainers
Headers show
Series [net-next] net: Revert the softirq will run annotation in ____napi_schedule(). | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix success Link
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 17765 this patch: 17765
netdev/cc_maintainers warning 6 maintainers not CCed: longman@redhat.com boqun.feng@gmail.com will@kernel.org mingo@redhat.com pabeni@redhat.com petrm@nvidia.com
netdev/build_clang success Errors and warnings before: 3913 this patch: 3913
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 17378 this patch: 17378
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 34 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Sebastian Andrzej Siewior March 21, 2022, 9:22 a.m. UTC
The lockdep annotation lockdep_assert_softirq_will_run() expects that
either hard or soft interrupts are disabled because both guaranty that
the "raised" soft-interrupts will be processed once the context is left.

This triggers in flush_smp_call_function_from_idle() but it this case it
explicitly calls do_softirq() in case of pending softirqs.

Revert the "softirq will run" annotation in ____napi_schedule() and move
the check back to __netif_rx() as it was. Keep the IRQ-off assert in
____napi_schedule() because this is always required.

Fixes: fbd9a2ceba5c7 ("net: Add lockdep asserts to ____napi_schedule().")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 include/linux/lockdep.h | 7 -------
 net/core/dev.c          | 3 +--
 2 files changed, 1 insertion(+), 9 deletions(-)

Comments

Jason A. Donenfeld March 21, 2022, 4:27 p.m. UTC | #1
Hi Sebastian,

On Mon, Mar 21, 2022 at 3:22 AM Sebastian Andrzej Siewior
<bigeasy@linutronix.de> wrote:
>
> The lockdep annotation lockdep_assert_softirq_will_run() expects that
> either hard or soft interrupts are disabled because both guaranty that
> the "raised" soft-interrupts will be processed once the context is left.
>
> This triggers in flush_smp_call_function_from_idle() but it this case it
> explicitly calls do_softirq() in case of pending softirqs.
>
> Revert the "softirq will run" annotation in ____napi_schedule() and move
> the check back to __netif_rx() as it was. Keep the IRQ-off assert in
> ____napi_schedule() because this is always required.
>
> Fixes: fbd9a2ceba5c7 ("net: Add lockdep asserts to ____napi_schedule().")
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

I can confirm that this fixes the WireGuard splat, so:

Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>

Jason
patchwork-bot+netdevbpf@kernel.org March 21, 2022, 9:20 p.m. UTC | #2
Hello:

This patch was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 21 Mar 2022 10:22:37 +0100 you wrote:
> The lockdep annotation lockdep_assert_softirq_will_run() expects that
> either hard or soft interrupts are disabled because both guaranty that
> the "raised" soft-interrupts will be processed once the context is left.
> 
> This triggers in flush_smp_call_function_from_idle() but it this case it
> explicitly calls do_softirq() in case of pending softirqs.
> 
> [...]

Here is the summary with links:
  - [net-next] net: Revert the softirq will run annotation in ____napi_schedule().
    https://git.kernel.org/netdev/net-next/c/351bdbb6419c

You are awesome, thank you!
diff mbox series

Patch

diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 0cc65d2167015..467b94257105e 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -329,12 +329,6 @@  extern void lock_unpin_lock(struct lockdep_map *lock, struct pin_cookie);
 
 #define lockdep_assert_none_held_once()		\
 	lockdep_assert_once(!current->lockdep_depth)
-/*
- * Ensure that softirq is handled within the callchain and not delayed and
- * handled by chance.
- */
-#define lockdep_assert_softirq_will_run()	\
-	lockdep_assert_once(hardirq_count() | softirq_count())
 
 #define lockdep_recursing(tsk)	((tsk)->lockdep_recursion)
 
@@ -420,7 +414,6 @@  extern int lockdep_is_held(const void *);
 #define lockdep_assert_held_read(l)		do { (void)(l); } while (0)
 #define lockdep_assert_held_once(l)		do { (void)(l); } while (0)
 #define lockdep_assert_none_held_once()	do { } while (0)
-#define lockdep_assert_softirq_will_run()	do { } while (0)
 
 #define lockdep_recursing(tsk)			(0)
 
diff --git a/net/core/dev.c b/net/core/dev.c
index 8e0cc5f2020d3..8a5109479dbe2 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4277,7 +4277,6 @@  static inline void ____napi_schedule(struct softnet_data *sd,
 {
 	struct task_struct *thread;
 
-	lockdep_assert_softirq_will_run();
 	lockdep_assert_irqs_disabled();
 
 	if (test_bit(NAPI_STATE_THREADED, &napi->state)) {
@@ -4887,7 +4886,7 @@  int __netif_rx(struct sk_buff *skb)
 {
 	int ret;
 
-	lockdep_assert_softirq_will_run();
+	lockdep_assert_once(hardirq_count() | softirq_count());
 
 	trace_netif_rx_entry(skb);
 	ret = netif_rx_internal(skb);