All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boqun Feng <boqun@kernel.org>
To: Andrea Righi <arighi@nvidia.com>
Cc: Joel Fernandes <joelagnelf@nvidia.com>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Kumar Kartikeya Dwivedi <memxor@gmail.com>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	frederic@kernel.org, neeraj.iitr10@gmail.com, urezki@gmail.com,
	boqun.feng@gmail.com, rcu@vger.kernel.org,
	Tejun Heo <tj@kernel.org>,
	bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	John Fastabend <john.fastabend@gmail.com>,
	Zqiang <qiang.zhang@linux.dev>
Subject: Re: [PATCH] rcu: Use an intermediate irq_work to start process_srcu()
Date: Fri, 20 Mar 2026 13:54:01 -0700	[thread overview]
Message-ID: <ab2z6XRzTajNADK2@tardis.local> (raw)
In-Reply-To: <ab2yd35rm6OgZUmb@gpd4>

On Fri, Mar 20, 2026 at 09:47:51PM +0100, Andrea Righi wrote:
> Hi Boqun,
> 
> On Fri, Mar 20, 2026 at 11:14:00AM -0700, Boqun Feng wrote:
> > Since commit c27cea4416a3 ("rcu: Re-implement RCU Tasks Trace in terms
> > of SRCU-fast") we switched to SRCU in BPF. However as BPF instrument can
> > happen basically everywhere (including where a scheduler lock is held),
> > call_srcu() now needs to avoid acquiring scheduler lock because
> > otherwise it could cause deadlock [1]. Fix this by following what the
> > previous RCU Tasks Trace did: using an irq_work to delay the queuing of
> > the work to start process_srcu().
> > 
> > [boqun: Apply Joel's feedback]
> > 
> > Reported-by: Andrea Righi <arighi@nvidia.com>
> > Closes: https://lore.kernel.org/all/abjzvz_tL_siV17s@gpd4/
> > Fixes: commit c27cea4416a3 ("rcu: Re-implement RCU Tasks Trace in terms of SRCU-fast")
> > Link: https://lore.kernel.org/rcu/3c4c5a29-24ea-492d-aeee-e0d9605b4183@nvidia.com/ [1]
> > Suggested-by: Zqiang <qiang.zhang@linux.dev>
> > Signed-off-by: Boqun Feng <boqun@kernel.org>
> > ---
> > @Zqiang, I put your name as Suggested-by because you proposed the same
> > idea, let me know if you rather not have it.
> > 
> > @Joel, I did two updates (including your test feedback, other one is
> > call irq_work_sync() when we clean the srcu_struct), please give it a
> > try.
> 
> I'm getting this at boot with this patch applied (testing directly from
> Joel's branch rcu/dev):
> 
> [    0.639477] DEBUG_LOCKS_WARN_ON(lockdep_hardirq_context())

My bad, this is missing:

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 73aef361a524..e08aaacad695 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -1993,13 +1993,14 @@ static void srcu_irq_work(struct irq_work *work)
        struct srcu_struct *ssp;
        struct srcu_usage *sup;
        unsigned long delay;
+       unsigned long flags;

        sup = container_of(work, struct srcu_usage, irq_work);
        ssp = sup->srcu_ssp;

-       raw_spin_lock_irq_rcu_node(ssp->srcu_sup);
+       raw_spin_lock_irqsave_rcu_node(ssp->srcu_sup, flags);
        delay = srcu_get_delay(ssp);
-       raw_spin_unlock_irq_rcu_node(ssp->srcu_sup);
+       raw_spin_unlock_irqrestore_rcu_node(ssp->srcu_sup, flags);

        queue_delayed_work(rcu_gp_wq, &sup->work, !!delay);
 }

Regards,
Boqun

> [    0.639479] WARNING: kernel/locking/lockdep.c:4404 at lockdep_hardirqs_on_prepare+0x15e/0x1a0, CPU#0: swapper/0/1
> [    0.639507] Modules linked in:
> [    0.639507] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 7.0.0-rc3-virtme #5 PREEMPT(full)
> [    0.639507] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
> [    0.639507] RIP: 0010:lockdep_hardirqs_on_prepare+0x165/0x1a0
> [    0.639507] Code: cc 90 e8 0e b1 4e 00 85 c0 74 0a 8b 35 54 08 43 02 85 f6 74 31 90 5b c3 cc cc cc cc 48 8d 3d d2 3c 44 02 48 c7 c6 b9 58 c5 b2 <67> 48 0f b9 3a eb ac 48 8d 3d cd 3c 44 02 48 c7 c6 37 55 c5 b2 67
> [    0.639507] RSP: 0018:ffffd26700003f58 EFLAGS: 00010046
> [    0.639507] RAX: 0000000000000001 RBX: ffffffffb35719f8 RCX: 0000000000000001
> [    0.639507] RDX: 0000000000000000 RSI: ffffffffb2c558b9 RDI: ffffffffb36bf810
> [    0.639507] RBP: ffffffffb35718e0 R08: 0000000000000001 R09: 0000000000000000
> [    0.639507] R10: 0000000000000001 R11: 000000007cb360a8 R12: 0000000000000000
> [    0.639507] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
> [    0.639507] FS:  0000000000000000(0000) GS:ffff8a7e076f6000(0000) knlGS:0000000000000000
> [    0.639507] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [    0.639507] CR2: ffff8a7dbffff000 CR3: 0000000023452000 CR4: 0000000000750ef0
> [    0.639507] PKRU: 55555554
> [    0.639507] Call Trace:
> [    0.639507]  <IRQ>
> [    0.639507]  trace_hardirqs_on+0x18/0x100
> [    0.639507]  _raw_spin_unlock_irq+0x28/0x50
> [    0.639507]  srcu_irq_work+0x63/0x90
> [    0.639507]  irq_work_single+0x69/0x90
> [    0.639507]  irq_work_run_list+0x26/0x40
> [    0.639507]  irq_work_run+0x18/0x30
> [    0.639507]  __sysvec_irq_work+0x35/0x1b0
> [    0.639507]  ? irq_exit_rcu+0xe/0x20
> [    0.639507]  sysvec_irq_work+0x6e/0x80
> [    0.639507]  </IRQ>
> [    0.639507]  <TASK>
> [    0.639507]  asm_sysvec_irq_work+0x1a/0x20
> [    0.639507] RIP: 0010:_raw_spin_unlock_irqrestore+0x36/0x70
> [    0.639507] Code: f5 53 48 8b 74 24 10 48 89 fb 48 83 c7 18 e8 b1 3d 26 ff 48 89 df e8 d9 a1 26 ff f7 c5 00 02 00 00 75 17 9c 58 f6 c4 02 75 2b <65> ff 0d 33 62 f0 01 74 16 5b 5d c3 cc cc cc cc e8 f5 83 35 ff 9c
> [    0.639507] RSP: 0018:ffffd26700013d48 EFLAGS: 00000246
> [    0.639507] RAX: 0000000000000092 RBX: ffffffffb35719f8 RCX: ffffffffb2017e0b
> [    0.639507] RDX: ffff8a7d80338000 RSI: 0000000000000000 RDI: ffffffffb2017e0b
> [    0.639507] RBP: 0000000000000282 R08: 0000000000000000 R09: 0000000000000001
> [    0.639507] R10: 0000000000000001 R11: 000000007cb360a8 R12: ffff8a7dbb628a40
> [    0.639507] R13: 0000000000000000 R14: ffffffffb3571940 R15: 0000000000000001
> [    0.639507]  ? _raw_spin_unlock_irqrestore+0x4b/0x70
> [    0.639507]  ? _raw_spin_unlock_irqrestore+0x4b/0x70
> [    0.639507]  srcu_gp_start_if_needed+0x37a/0x520
> [    0.639507]  ? __pfx_rcu_init_tasks_generic+0x10/0x10
> [    0.639507]  __synchronize_srcu+0xf6/0x1b0
> [    0.639507]  ? __pfx_wakeme_after_rcu+0x10/0x10
> [    0.639507]  ? __pfx_rcu_init_tasks_generic+0x10/0x10
> [    0.639507]  rcu_init_tasks_generic+0xfe/0x120
> [    0.639507]  do_one_initcall+0x6f/0x300
> [    0.639507]  kernel_init_freeable+0x24b/0x2b0
> [    0.639507]  ? __pfx_kernel_init+0x10/0x10
> [    0.639507]  kernel_init+0x1a/0x130
> [    0.639507]  ret_from_fork+0x2bd/0x370
> [    0.639507]  ? __pfx_kernel_init+0x10/0x10
> [    0.639507]  ret_from_fork_asm+0x1a/0x30
> [    0.639507]  </TASK>
> [    0.639507] irq event stamp: 6418
> [    0.639507] hardirqs last  enabled at (6417): [<ffffffffb2017e0b>] _raw_spin_unlock_irqrestore+0x4b/0x70
> [    0.639507] hardirqs last disabled at (6418): [<ffffffffb20013fe>] sysvec_irq_work+0xe/0x80
> [    0.639507] softirqs last  enabled at (6406): [<ffffffffb11ce7b6>] __irq_exit_rcu+0x96/0xc0
> [    0.639507] softirqs last disabled at (6401): [<ffffffffb11ce7b6>] __irq_exit_rcu+0x96/0xc0
> [    0.639507] ---[ end trace 0000000000000000 ]---
> 
> Thanks,
> -Andrea

  reply	other threads:[~2026-03-20 20:54 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-17 13:34 Next-level bug in SRCU implementation of RCU Tasks Trace + PREEMPT_RT Paul E. McKenney
2026-03-18 10:50 ` Sebastian Andrzej Siewior
2026-03-18 11:49   ` Paul E. McKenney
2026-03-18 14:43     ` Sebastian Andrzej Siewior
2026-03-18 15:43       ` Paul E. McKenney
2026-03-18 16:04         ` Sebastian Andrzej Siewior
2026-03-18 16:32           ` Paul E. McKenney
2026-03-18 16:42             ` Boqun Feng
2026-03-18 18:45               ` Paul E. McKenney
2026-03-18 16:47             ` Sebastian Andrzej Siewior
2026-03-18 18:48               ` Paul E. McKenney
2026-03-19  8:55                 ` Sebastian Andrzej Siewior
2026-03-19 10:05                   ` Paul E. McKenney
2026-03-19 10:43                     ` Paul E. McKenney
2026-03-19 10:51                       ` Sebastian Andrzej Siewior
2026-03-18 15:51       ` Boqun Feng
2026-03-18 18:42         ` Paul E. McKenney
2026-03-18 20:04           ` Joel Fernandes
2026-03-18 20:11             ` Kumar Kartikeya Dwivedi
2026-03-18 20:25               ` Joel Fernandes
2026-03-18 21:52             ` Boqun Feng
2026-03-18 21:55               ` Boqun Feng
2026-03-18 22:15                 ` Boqun Feng
2026-03-18 22:52                   ` Joel Fernandes
2026-03-18 23:27                     ` Boqun Feng
2026-03-19  1:08                       ` Boqun Feng
2026-03-19  9:03                         ` Sebastian Andrzej Siewior
2026-03-19 16:27                           ` Boqun Feng
2026-03-19 16:33                             ` Sebastian Andrzej Siewior
2026-03-19 16:48                               ` Boqun Feng
2026-03-19 16:59                                 ` Kumar Kartikeya Dwivedi
2026-03-19 17:27                                   ` Boqun Feng
2026-03-19 18:41                                     ` Kumar Kartikeya Dwivedi
2026-03-19 20:14                                       ` Boqun Feng
2026-03-19 20:21                                         ` Joel Fernandes
2026-03-19 20:39                                           ` Boqun Feng
2026-03-20 15:34                                             ` Paul E. McKenney
2026-03-20 15:59                                               ` Boqun Feng
2026-03-20 16:24                                                 ` Paul E. McKenney
2026-03-20 16:57                                                   ` Boqun Feng
2026-03-20 17:54                                                     ` Joel Fernandes
2026-03-20 18:14                                                       ` [PATCH] rcu: Use an intermediate irq_work to start process_srcu() Boqun Feng
2026-03-20 19:18                                                         ` Joel Fernandes
2026-03-20 20:47                                                         ` Andrea Righi
2026-03-20 20:54                                                           ` Boqun Feng [this message]
2026-03-20 21:00                                                             ` Andrea Righi
2026-03-20 21:02                                                               ` Andrea Righi
2026-03-20 21:06                                                                 ` Boqun Feng
2026-03-20 22:29                                                           ` [PATCH v2] " Boqun Feng
2026-03-23 21:09                                                             ` Joel Fernandes
2026-03-23 22:18                                                               ` Boqun Feng
2026-03-23 22:50                                                                 ` Joel Fernandes
2026-03-24 11:27                                                             ` Frederic Weisbecker
2026-03-24 14:56                                                               ` Joel Fernandes
2026-03-24 14:56                                                               ` Alexei Starovoitov
2026-03-24 17:36                                                                 ` Boqun Feng
2026-03-24 18:40                                                                   ` Joel Fernandes
2026-03-24 19:23                                                                   ` Paul E. McKenney
2026-03-26 19:12                                                             ` patchwork-bot+netdevbpf
2026-03-21  4:27                                                         ` [PATCH] " Zqiang
2026-03-21 18:15                                                           ` Boqun Feng
2026-03-21 10:10                                                         ` Paul E. McKenney
2026-03-21 17:15                                                           ` Boqun Feng
2026-03-21 17:41                                                             ` Paul E. McKenney
2026-03-21 18:06                                                               ` Boqun Feng
2026-03-21 19:31                                                                 ` Paul E. McKenney
2026-03-21 19:45                                                                   ` Boqun Feng
2026-03-21 20:07                                                                     ` Paul E. McKenney
2026-03-21 20:08                                                                       ` Boqun Feng
2026-03-22 10:09                                                                         ` Paul E. McKenney
2026-03-22 16:16                                                                           ` Boqun Feng
2026-03-22 17:09                                                                             ` Paul E. McKenney
2026-03-22 17:31                                                                               ` Boqun Feng
2026-03-22 17:44                                                                                 ` Paul E. McKenney
2026-03-22 18:17                                                                                   ` Boqun Feng
2026-03-22 19:47                                                                                     ` Paul E. McKenney
2026-03-22 20:26                                                                                       ` Boqun Feng
2026-03-23  7:50                                                                                         ` Paul E. McKenney
2026-03-20 18:20                                                       ` Next-level bug in SRCU implementation of RCU Tasks Trace + PREEMPT_RT Boqun Feng
2026-03-20 23:11                                                     ` Paul E. McKenney
2026-03-21  3:29                                                       ` Paul E. McKenney
2026-03-21 17:03                                                   ` [RFC PATCH] rcu-tasks: Avoid using mod_timer() in call_rcu_tasks_generic() Boqun Feng
2026-03-23 15:17                                                     ` Boqun Feng
2026-03-23 20:37                                                       ` Joel Fernandes
2026-03-23 21:50                                                       ` Kumar Kartikeya Dwivedi
2026-03-23 22:13                                                         ` Boqun Feng
2026-03-20 16:15                                         ` Next-level bug in SRCU implementation of RCU Tasks Trace + PREEMPT_RT Boqun Feng
2026-03-20 16:24                                           ` Paul E. McKenney
2026-03-19 17:02                                 ` Sebastian Andrzej Siewior
2026-03-19 17:44                                   ` Boqun Feng
2026-03-19 18:42                                     ` Joel Fernandes
2026-03-19 20:20                                       ` Boqun Feng
2026-03-19 20:26                                         ` Joel Fernandes
2026-03-19 20:45                                           ` Joel Fernandes
2026-03-19 10:02                         ` Paul E. McKenney
2026-03-19 14:34                           ` Boqun Feng
2026-03-19 16:10                             ` Paul E. McKenney
2026-03-18 23:56                   ` Kumar Kartikeya Dwivedi
2026-03-19  0:26                     ` Zqiang
2026-03-19  1:13                       ` Boqun Feng
2026-03-19  2:47                         ` Joel Fernandes

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=ab2z6XRzTajNADK2@tardis.local \
    --to=boqun@kernel.org \
    --cc=arighi@nvidia.com \
    --cc=ast@kernel.org \
    --cc=bigeasy@linutronix.de \
    --cc=boqun.feng@gmail.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=frederic@kernel.org \
    --cc=joelagnelf@nvidia.com \
    --cc=john.fastabend@gmail.com \
    --cc=memxor@gmail.com \
    --cc=neeraj.iitr10@gmail.com \
    --cc=paulmck@kernel.org \
    --cc=qiang.zhang@linux.dev \
    --cc=rcu@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=urezki@gmail.com \
    /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.