From: Boqun Feng <boqun.feng@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: "Lyude Paul" <lyude@redhat.com>,
rust-for-linux@vger.kernel.org,
"Thomas Gleixner" <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Ingo Molnar" <mingo@redhat.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Juri Lelli" <juri.lelli@redhat.com>,
"Vincent Guittot" <vincent.guittot@linaro.org>,
"Dietmar Eggemann" <dietmar.eggemann@arm.com>,
"Ben Segall" <bsegall@google.com>, "Mel Gorman" <mgorman@suse.de>,
"Valentin Schneider" <vschneid@redhat.com>,
"Will Deacon" <will@kernel.org>,
"Waiman Long" <longman@redhat.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"David Woodhouse" <dwmw@amazon.co.uk>,
"Jens Axboe" <axboe@kernel.dk>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
NeilBrown <neilb@suse.de>,
"Caleb Sander Mateos" <csander@purestorage.com>,
"Ryo Takakura" <ryotkkr98@gmail.com>,
"K Prateek Nayak" <kprateek.nayak@amd.com>
Subject: Re: [RFC RESEND v10 03/14] irq & spin_lock: Add counted interrupt disabling/enabling
Date: Tue, 17 Jun 2025 07:34:10 -0700 [thread overview]
Message-ID: <aFF84rW5fNXrnwC8@Mac.home> (raw)
In-Reply-To: <20250617101120.7c946656@gandalf.local.home>
On Tue, Jun 17, 2025 at 10:11:20AM -0400, Steven Rostedt wrote:
> On Tue, 27 May 2025 18:21:44 -0400
> Lyude Paul <lyude@redhat.com> wrote:
>
> > +static inline void local_interrupt_enable(void)
> > +{
> > + int new_count;
> > +
> > + new_count = hardirq_disable_exit();
> > +
> > + if ((new_count & HARDIRQ_DISABLE_MASK) == 0) {
> > + unsigned long flags;
> > +
> > + flags = raw_cpu_read(local_interrupt_disable_state.flags);
> > + local_irq_restore(flags);
> > + /*
> > + * TODO: re-read preempt count can be avoided, but it needs
> > + * should_resched() taking another parameter as the current
> > + * preempt count
> > + */
> > +#ifdef PREEMPTION
> > + if (should_resched(0))
> > + __preempt_schedule();
> > +#endif
> > + }
> > +}
>
> I'm confused to why the should_resched() is needed? We are handling
> interrupts right? The hardirq_disable_exit() will set preempt_count to zero
> before we enable interrupts. When the local_irq_restore() enables interrupts
> again, if there's an interrupt pending it will trigger then. If the
> interrupt sets NEED_RESCHED, when it returns from the interrupt handler, it
> will see preempt_count as zero, right?
>
Because the new local_interrupt_{disable, enable}() participate the
preempt count game as well, for example, __raw_spin_lock_irq_disable()
doesn't call an additional preempt_disable() and
__raw_spin_unlock_irq_enable() doesn't call preempt_enable(). And the
following can happen:
spin_lock(a);
// preemption is disabled.
<interrupted and set need_resched>
spin_lock_irq_disable(b);
spin_unlock(a);
spin_unlock_irq_enable(b):
local_interrupt_enable():
// need to check should_resched, otherwise preemption won't
// happen.
Regards,
Boqun
> If it does, then it will call schedule before it gets back to this code.
>
> -- Steve
next prev parent reply other threads:[~2025-06-17 14:34 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-27 22:21 [RFC RESEND v10 00/14] Refcounted interrupts, SpinLockIrq for rust Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 01/14] preempt: Introduce HARDIRQ_DISABLE_BITS Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 02/14] preempt: Introduce __preempt_count_{sub, add}_return() Lyude Paul
2025-05-28 6:37 ` Heiko Carstens
2025-05-27 22:21 ` [RFC RESEND v10 03/14] irq & spin_lock: Add counted interrupt disabling/enabling Lyude Paul
2025-05-28 9:10 ` Peter Zijlstra
2025-05-28 14:03 ` Steven Rostedt
2025-05-28 14:47 ` Boqun Feng
2025-06-16 17:54 ` Joel Fernandes
2025-06-16 18:02 ` Boqun Feng
2025-06-16 18:37 ` Joel Fernandes
2025-06-17 14:14 ` Steven Rostedt
2025-05-28 18:47 ` Lyude Paul
2025-06-16 18:10 ` Joel Fernandes
2025-06-16 18:16 ` Boqun Feng
2025-06-17 14:11 ` Steven Rostedt
2025-06-17 14:34 ` Boqun Feng [this message]
2025-06-17 15:11 ` Steven Rostedt
2025-06-17 14:25 ` Boqun Feng
2025-05-27 22:21 ` [RFC RESEND v10 04/14] rust: Introduce interrupt module Lyude Paul
2025-05-29 9:21 ` Benno Lossin
2025-05-27 22:21 ` [RFC RESEND v10 05/14] rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 06/14] rust: sync: Add SpinLockIrq Lyude Paul
2025-06-16 19:51 ` Joel Fernandes
2025-07-16 20:29 ` Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 07/14] rust: sync: Introduce lock::Backend::Context Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 08/14] rust: sync: lock: Add `Backend::BackendInContext` Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 09/14] rust: sync: Add a lifetime parameter to lock::global::GlobalGuard Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 10/14] rust: sync: lock/global: Rename B to G in trait bounds Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 11/14] rust: sync: Expose lock::Backend Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 12/14] rust: sync: lock/global: Add Backend parameter to GlobalGuard Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 13/14] rust: sync: lock/global: Add BackendInContext support to GlobalLock Lyude Paul
2025-05-27 22:21 ` [RFC RESEND v10 14/14] locking: Switch to _irq_{disable,enable}() variants in cleanup guards Lyude Paul
2025-05-28 6:11 ` Sebastian Andrzej Siewior
2025-07-02 10:16 ` [RFC RESEND v10 00/14] Refcounted interrupts, SpinLockIrq for rust Benno Lossin
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=aFF84rW5fNXrnwC8@Mac.home \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=axboe@kernel.dk \
--cc=bigeasy@linutronix.de \
--cc=bjorn3_gh@protonmail.com \
--cc=bsegall@google.com \
--cc=csander@purestorage.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dietmar.eggemann@arm.com \
--cc=dwmw@amazon.co.uk \
--cc=gary@garyguo.net \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=neilb@suse.de \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=ryotkkr98@gmail.com \
--cc=tglx@linutronix.de \
--cc=tmgross@umich.edu \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
/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.