From: Frederic Weisbecker <frederic@kernel.org>
To: Joel Fernandes <joelagnelf@nvidia.com>
Cc: linux-kernel@vger.kernel.org,
"Paul E. McKenney" <paulmck@kernel.org>,
Xiongfeng Wang <wangxiongfeng2@huawei.com>,
rcu@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH 1/2] context_tracking: Provide helper to determine if we're in IRQ
Date: Wed, 11 Jun 2025 18:25:04 +0200 [thread overview]
Message-ID: <aEmt4Aa3-gULNtic@localhost.localdomain> (raw)
In-Reply-To: <20250609180125.2988129-1-joelagnelf@nvidia.com>
Le Mon, Jun 09, 2025 at 02:01:23PM -0400, Joel Fernandes a écrit :
> context_tracking keeps track of whether we're handling IRQ well after
> the preempt masks give take it off their books. We need this
> functionality in a follow-up patch to fix a bug. Provide a helper API
> for the same.
>
> Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
> ---
> include/linux/context_tracking_irq.h | 2 ++
> kernel/context_tracking.c | 12 ++++++++++++
> 2 files changed, 14 insertions(+)
>
> diff --git a/include/linux/context_tracking_irq.h b/include/linux/context_tracking_irq.h
> index 197916ee91a4..35a5ad971514 100644
> --- a/include/linux/context_tracking_irq.h
> +++ b/include/linux/context_tracking_irq.h
> @@ -9,6 +9,7 @@ void ct_irq_enter_irqson(void);
> void ct_irq_exit_irqson(void);
> void ct_nmi_enter(void);
> void ct_nmi_exit(void);
> +bool ct_in_irq(void);
> #else
> static __always_inline void ct_irq_enter(void) { }
> static __always_inline void ct_irq_exit(void) { }
> @@ -16,6 +17,7 @@ static inline void ct_irq_enter_irqson(void) { }
> static inline void ct_irq_exit_irqson(void) { }
> static __always_inline void ct_nmi_enter(void) { }
> static __always_inline void ct_nmi_exit(void) { }
> +static inline bool ct_in_irq(void) { return false; }
> #endif
>
> #endif
> diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c
> index fb5be6e9b423..d0759ef9a6bd 100644
> --- a/kernel/context_tracking.c
> +++ b/kernel/context_tracking.c
> @@ -392,6 +392,18 @@ noinstr void ct_irq_exit(void)
> ct_nmi_exit();
> }
>
> +/**
> + * ct_in_irq - check if CPU is in a context-tracked IRQ context.
> + *
> + * Returns true if ct_irq_enter() has been called and ct_irq_exit()
> + * has not yet been called. This indicates the CPU is currently
> + * processing an interrupt.
> + */
> +bool ct_in_irq(void)
> +{
> + return ct_nmi_nesting() != 0;
If rcu_is_watching() and not in an interrupt, ct_nmi_nesting()
is actually CT_NESTING_IRQ_NONIDLE. If rcu_is_watching() and
in an interrupt, ct_nmi_nesting() can be CT_NESTING_IRQ_NONIDLE + whatever.
So this doesn't work. I wish we could remove that CT_NESTING_IRQ_NONIDLE
that is there for hysterical raisins but that doesn't fit in an urgent pile.
So probably:
bool ct_in_irq(void)
{
long nesting = ct_nmi_nesting();
return (nesting && nesting != CT_NESTING_IRQ_NONIDLE);
}
Thanks.
--
Frederic Weisbecker
SUSE Labs
prev parent reply other threads:[~2025-06-11 16:25 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-09 18:01 [PATCH 1/2] context_tracking: Provide helper to determine if we're in IRQ Joel Fernandes
2025-06-09 18:01 ` [PATCH 2/2] rcu: Fix lockup when RCU reader used while IRQ exiting Joel Fernandes
2025-06-09 19:49 ` Boqun Feng
2025-06-09 23:26 ` Frederic Weisbecker
2025-06-10 0:49 ` Boqun Feng
2025-06-10 12:23 ` Frederic Weisbecker
2025-06-10 15:47 ` Joel Fernandes
2025-06-12 3:06 ` Xiongfeng Wang
2025-06-12 11:37 ` Frederic Weisbecker
2025-06-11 16:05 ` Boqun Feng
2025-06-11 16:16 ` Paul E. McKenney
2025-06-11 16:21 ` Boqun Feng
2025-06-09 18:05 ` [PATCH 1/2] context_tracking: Provide helper to determine if we're in IRQ Joel Fernandes
2025-06-11 16:25 ` Frederic Weisbecker [this message]
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=aEmt4Aa3-gULNtic@localhost.localdomain \
--to=frederic@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=joelagnelf@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=wangxiongfeng2@huawei.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.