public inbox for rcu@vger.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Boqun Feng <boqun@kernel.org>
Cc: Joel Fernandes <joelagnelf@nvidia.com>,
	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>,
	Andrea Righi <arighi@nvidia.com>, Zqiang <qiang.zhang@linux.dev>
Subject: Re: [PATCH] rcu: Use an intermediate irq_work to start process_srcu()
Date: Sun, 22 Mar 2026 10:44:58 -0700	[thread overview]
Message-ID: <e5fdd5db-4897-4975-a2db-ddb951385e89@paulmck-laptop> (raw)
In-Reply-To: <acAnYrlkkUvbNkGG@tardis.local>

On Sun, Mar 22, 2026 at 10:31:14AM -0700, Boqun Feng wrote:
> On Sun, Mar 22, 2026 at 10:09:53AM -0700, Paul E. McKenney wrote:
> > On Sun, Mar 22, 2026 at 09:16:59AM -0700, Boqun Feng wrote:
> > > On Sun, Mar 22, 2026 at 03:09:19AM -0700, Paul E. McKenney wrote:
> > > > On Sat, Mar 21, 2026 at 01:08:59PM -0700, Boqun Feng wrote:
> > > > > On Sat, Mar 21, 2026 at 01:07:45PM -0700, Paul E. McKenney wrote:
> > > > > > On Sat, Mar 21, 2026 at 12:45:27PM -0700, Boqun Feng wrote:
> > > > > > > On Sat, Mar 21, 2026 at 12:31:04PM -0700, Paul E. McKenney wrote:
> > > > > > > > On Sat, Mar 21, 2026 at 11:06:59AM -0700, Boqun Feng wrote:
> > > > > > > > > On Sat, Mar 21, 2026 at 10:41:47AM -0700, Paul E. McKenney wrote:
> > > > > > > > > [...]
> > > > > > > > > > > > +	raw_spin_lock_rcu_node(ssp->srcu_sup);
> > > > > > > > > > > > +	delay = srcu_get_delay(ssp);
> > > > > > > > > > > > +	raw_spin_unlock_rcu_node(ssp->srcu_sup);
> > > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > It was fixed differently in v2:
> > > > > > > > > > > 
> > > > > > > > > > > 	https://lore.kernel.org/rcu/20260320222916.19987-1-boqun@kernel.org/
> > > > > > > > > > > 
> > > > > > > > > > > I used _irqsave/_irqrestore just in case. Given it's an urgent fix,
> > > > > > > > > > > overly careful code is probably fine ;-)
> > > > > > > > > > > 
> > > > > > > > > > > Thanks for the testing and feedback.
> > > > > > > > > > 
> > > > > > > > > > OK, I will try that one, thank you!
> > > > > > > > > > 
> > > > > > > > > > FYI, with my change on your earlier version, SRCU-T got deadlocks between
> > > > > > > > > > the pi-lock and the workqueue pool lock.  Which might or might not be
> > > > > > > > > > particularly urgent.
> > > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > I just checked my run yesterday, I also hit it. It's probably what
> > > > > > > > > Zqiang has found:
> > > > > > > > > 
> > > > > > > > > 	https://lore.kernel.org/rcu/4c23c66f86a2aff8f2d7b759f9dd257b82147a17@linux.dev/
> > > > > > > > > 
> > > > > > > > > We have a queue_work_on() in srcu_schedule_cbs_sdp(), so
> > > > > > > > > 
> > > > > > > > >     srcu_torture_deferred_free():
> > > > > > > > >       raw_spin_lock_irqsave(->pi_lock,...);
> > > > > > > > >       call_srcu():
> > > > > > > > >         if (snp == snp_leaf && snp_seq != s) {
> > > > > > > > >            srcu_schedule_cbs_sdp(sdp, do_norm ? SRCU_INTERVAL : 0):
> > > > > > > > > 	     if (!delay)
> > > > > > > > >                queue_work_on(...)
> > > > > > > > > 
> > > > > > > > > I was about to reply to Zqiang, fixing that could be a touch design
> > > > > > > > > decision. Since it's a per srcu_data work ;-) NR_CPUS x irq_work
> > > > > > > > > incoming.
> > > > > > > > 
> > > > > > > > Just to be clear, SRCU-T is Tiny SRCU rather than Tree SRCU.  So perhaps
> > > > > > > > lower priority, though perhaps not lower irritation.  ;-)
> > > > > > > 
> > > > > > > I see, there is a schedule_work() in srcutiny's
> > > > > > > srcu_gp_start_if_needed(). But it couldn't cause deadlock on UP since
> > > > > > > locks are (almost) no-op. Maybe we can make RCU torture only test it on
> > > > > > > SMP?
> > > > > > 
> > > > > > Like this, you mean?  I will give it a shot tomorrow.
> > > > > 
> > > > > Yes, thanks!
> > > > 
> > > > OK, the previous patch did fine on short rcutorture testing aside from
> > > > the !SMP lockdep splat, so I have started the test without pi_lock.
> > > > 
> > > > Longer term, shouldn't lockdep take into account the fact that on !SMP,
> > > > the disabling of preemption (or interrupts or...) is essentially the same
> > > > as acquiring a global lock?  This means that only one task at a time can
> > > > be acquiring a raw spinlock on !SMP, so that the order of acquisition
> > > > of raw spinlocks on !SMP is irrelevant?  (Aside from self-deadlocking
> > > > double acquisitions, perhaps.)  In other words, shouldn't lockdep leave
> > > > raw spinlocks out of lockdep's cycle-detection data structure?
> > > 
> > > Lockdep doesn't know whether a code path is UP-only, so it'll apply the
> > > general locking rule to check. Similar as lockdep still detect
> > > PREEMPT_RT locking issue for !PREEMPT_RT kernel. Maybe we can add a
> > > separate kconfig to narrow down lockdep detection for UP-only if UP=y.
> > 
> > But lockdep *does* know when it is running in a CONFIG_SMP=n kernel,
> > correct?  In which case all the code paths are UP-only.
> 
> Why? UP and SMP can share the same code path, no? Just because lockdep
> is running in UP and see a code path, doesn't mean that code path is
> UP-only, right? What I was trying to say is Lockdep detects generel
> locking rule violation, so even when it's running in UP kernel, it'll
> use rules that SMP uses.

I know that this is what lockdep is doing.  I am instead saying that
what lockdep is doing is not a good thing.  ;-)

> > The situation with CONFIG_PREEMPT_RT=y is quite different: The motivation
> > was for people running lockdep on CONFIG_PREEMPT_RT=n kernels to
> > detect and fix locking issues that would otherwise only show up in
> > CONFIG_PREEMPT_RT=y kernels.
> 
> I'm not sure how it's different than people wanted to detect SMP=y
> locking issues when running UP kernel. Of course, I didn't know whether
> that's the intention because I wasn't there ;-)

It is very different.

There were very few people developing and running PREEMPT_RT, so it
was quite difficult for them to clean up the lock-context issues that
everyone else was creating.  Making lockdep check for PREEMPT_RT issues
in !PREEMPT_RT kernels was therefore very helpful, at least to the
PREEMPT_RT guys.

In contrast (and unlike 20 years ago), almost everyone runs SMP, so there
is no harm in !SMP lockdep ignoring things that would be deadlocks in
SMP kernels.  The ample SMP lockdep testing will catch those issues,
so there is no need for extra help from UP lockdep testing.

							Thanx, Paul

> Regards,
> Boqun
> 
> > And of course, CONFIG_SMP=n kernels still need deadlock detection for
> > mutexes and the like.
> > 
> > 							Thanx, Paul

  reply	other threads:[~2026-03-22 17:45 UTC|newest]

Thread overview: 100+ 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
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-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 [this message]
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=e5fdd5db-4897-4975-a2db-ddb951385e89@paulmck-laptop \
    --to=paulmck@kernel.org \
    --cc=arighi@nvidia.com \
    --cc=ast@kernel.org \
    --cc=bigeasy@linutronix.de \
    --cc=boqun.feng@gmail.com \
    --cc=boqun@kernel.org \
    --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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox