All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Boqun Feng <boqun@kernel.org>
Cc: "Lyude Paul" <lyude@redhat.com>,
	rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Daniel Almeida" <daniel.almeida@collabora.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>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
	"Waiman Long" <longman@redhat.com>,
	"Joel Fernandes" <joelagnelf@nvidia.com>
Subject: Re: [PATCH v17 02/16] preempt: Track NMI nesting to separate per-CPU counter
Date: Fri, 6 Feb 2026 09:45:05 +0100	[thread overview]
Message-ID: <20260206084505.GP1282955@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <aYUUrHQliNIoe9eQ@tardis.local>

On Thu, Feb 05, 2026 at 02:07:40PM -0800, Boqun Feng wrote:
> On Wed, Feb 04, 2026 at 12:12:34PM +0100, Peter Zijlstra wrote:
> [...]
> >  DEFINE_PER_CPU_CACHE_HOT(unsigned long, cpu_current_top_of_stack) = TOP_OF_INIT_STACK;
> > diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
> > index d57cab4d4c06..77defd9624bf 100644
> > --- a/include/linux/hardirq.h
> > +++ b/include/linux/hardirq.h
> > @@ -108,15 +108,14 @@ void irq_exit_rcu(void);
> >  	do {							\
> >  		lockdep_off();					\
> >  		arch_nmi_enter();				\
> > -		BUG_ON(in_nmi() == NMI_MASK);			\
> > -		__preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET);	\
> > +		__preempt_count_nmi_enter();			\
> >  	} while (0)
> >  
> >  #define nmi_enter()						\
> >  	do {							\
> >  		__nmi_enter();					\
> >  		lockdep_hardirq_enter();			\
> > -		ct_nmi_enter();				\
> > +		ct_nmi_enter();					\
> >  		instrumentation_begin();			\
> >  		ftrace_nmi_enter();				\
> >  		instrumentation_end();				\
> > @@ -125,7 +124,7 @@ void irq_exit_rcu(void);
> >  #define __nmi_exit()						\
> >  	do {							\
> >  		BUG_ON(!in_nmi());				\
> > -		__preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET);	\
> > +		__preempt_count_nmi_exit();			\
> >  		arch_nmi_exit();				\
> >  		lockdep_on();					\
> >  	} while (0)
> > diff --git a/include/linux/preempt.h b/include/linux/preempt.h
> > index d964f965c8ff..7617ca97f442 100644
> > --- a/include/linux/preempt.h
> > +++ b/include/linux/preempt.h
> [...]
> > @@ -132,6 +145,27 @@ static __always_inline unsigned char interrupt_context_level(void)
> >  # define in_task()		(!(preempt_count() & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET)))
> >  #endif
> >  
> > +#ifndef CONFIG_PREEMPT_LONG
> > +DECLARE_PER_CPU(unsigned int, nmi_nesting);
> > +
> > +#define __preempt_count_nmi_enter()				\
> > +	do {							\
> > +		unsigned int _o = NMI_MASK + HARDIRQ_OFFSET;	\
> > +		__this_cpu_inc(nmi_nesting);			\
> > +		_o -= (preempt_count() & NMI_MASK);		\
> > +		__preempt_count_add(_o);			\
> > +	} while (0)
> > +
> > +#define __preempt_count_nmi_exit()				\
> > +	do {							\
> > +		unsigned int _o = HARDIRQ_OFFSET;		\
> > +		if (!__this_cpu_dec_return(nmi_nesting))	\
> > +			_o += NMI_MASK;				\
> > +		__preempt_count_sub(_o);			\
> > +	} while (0)
> > +
> > +#endif
> > +
> 
> We need to move it into include/linux/hardirq.h because percpu is not
> included in <linux/preempt.h>.

That is fine. I also realized you can move the variants from
arch/x86/asm/preempt.h right next to it, it only depends on
PREEMPT_LONG, not anything else, so there is nothing arch specific to
it.

Avoids that getting duplicated on arm64,s390 etc.

  reply	other threads:[~2026-02-06  8:45 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-21 22:39 [PATCH v17 00/16] Refcounted interrupts, SpinLockIrq for rust Lyude Paul
2026-01-21 22:39 ` [PATCH v17 01/16] preempt: Introduce HARDIRQ_DISABLE_BITS Lyude Paul
2026-01-21 22:39 ` [PATCH v17 02/16] preempt: Track NMI nesting to separate per-CPU counter Lyude Paul
2026-02-03 11:44   ` Peter Zijlstra
2026-02-06  1:22     ` Joel Fernandes
2026-02-03 12:15   ` Peter Zijlstra
2026-02-04 11:12     ` Peter Zijlstra
2026-02-04 12:32       ` Gary Guo
2026-02-04 13:00         ` Peter Zijlstra
2026-02-05 21:40       ` Boqun Feng
2026-02-05 22:17         ` Joel Fernandes
2026-02-06  0:50           ` Joel Fernandes
2026-02-06  1:14             ` Boqun Feng
2026-02-06  1:24               ` Joel Fernandes
2026-02-06  2:51                 ` Boqun Feng
2026-02-06  8:13                   ` Joel Fernandes
2026-02-06 15:28                     ` Boqun Feng
2026-02-06 16:00                       ` Joel Fernandes
2026-02-06 16:16                         ` Boqun Feng
2026-02-07 22:11                           ` Joel Fernandes
2026-02-06  8:42                 ` Peter Zijlstra
2026-02-05 22:07       ` Boqun Feng
2026-02-06  8:45         ` Peter Zijlstra [this message]
2026-01-21 22:39 ` [PATCH v17 03/16] preempt: Introduce __preempt_count_{sub, add}_return() Lyude Paul
2026-01-21 22:39 ` [PATCH v17 04/16] openrisc: Include <linux/cpumask.h> in smp.h Lyude Paul
2026-01-21 22:39 ` [PATCH v17 05/16] irq & spin_lock: Add counted interrupt disabling/enabling Lyude Paul
2026-01-21 22:39 ` [PATCH v17 06/16] irq: Add KUnit test for refcounted interrupt enable/disable Lyude Paul
2026-01-30  7:43   ` David Gow
2026-01-21 22:39 ` [PATCH v17 07/16] rust: Introduce interrupt module Lyude Paul
2026-01-21 22:39 ` [PATCH v17 08/16] rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers Lyude Paul
2026-01-26 13:25   ` Gary Guo
2026-01-21 22:39 ` [PATCH v17 09/16] rust: sync: Add SpinLockIrq Lyude Paul
2026-01-23 22:26   ` Benno Lossin
2026-01-21 22:39 ` [PATCH v17 10/16] rust: sync: Introduce lock::Lock::lock_with() and friends Lyude Paul
2026-01-22 11:56   ` kernel test robot
2026-01-23 22:55   ` Benno Lossin
2026-01-26 13:31   ` Gary Guo
2026-01-21 22:39 ` [PATCH v17 11/16] rust: sync: Expose lock::Backend Lyude Paul
2026-01-23 22:56   ` Benno Lossin
2026-01-21 22:39 ` [PATCH v17 12/16] rust: sync: lock/global: Rename B to G in trait bounds Lyude Paul
2026-01-21 22:39 ` [PATCH v17 13/16] rust: sync: Add a lifetime parameter to lock::global::GlobalGuard Lyude Paul
2026-01-21 22:39 ` [PATCH v17 14/16] rust: sync: lock/global: Add Backend parameter to GlobalGuard Lyude Paul
2026-01-21 22:39 ` [PATCH v17 15/16] rust: sync: lock/global: Add ContextualBackend support to GlobalLock Lyude Paul
2026-01-21 22:39 ` [PATCH v17 16/16] locking: Switch to _irq_{disable,enable}() variants in cleanup guards Lyude Paul
2026-01-26 13:24 ` [PATCH v17 00/16] Refcounted interrupts, SpinLockIrq for rust Gary Guo
2026-01-26 16:17 ` Boqun Feng
2026-02-03  0:36   ` Boqun Feng

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=20260206084505.GP1282955@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=a.hindborg@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=boqun@kernel.org \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=gary@garyguo.net \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=lossin@kernel.org \
    --cc=lyude@redhat.com \
    --cc=mingo@redhat.com \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tmgross@umich.edu \
    --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.