All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Breno Leitao <leitao@debian.org>, Marco Elver <elver@google.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>,
	Boqun Feng <boqun@kernel.org>, Waiman Long <longman@redhat.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com,
	kernel-team@meta.com
Subject: Re: [PATCH v2] kcsan: Don't enter an nbcon emergency section for verbose reports
Date: Thu, 5 Nov 2026 10:59:59 +0100	[thread overview]
Message-ID: <auxTn4YuYHUOt4ml@pathway.suse.cz> (raw)
In-Reply-To: <871p90psjl.fsf@jogness.linutronix.de>

On Wed 2026-11-04 15:48:06, John Ogness wrote:
> On 2026-11-04, Breno Leitao <leitao@debian.org> wrote:
> >> Wouldn't the below diff be the proper fix?
> >> 
> >> John
> >> 
> >> diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
> >> index c3dc84a7cef26..71f1b4b8f06d5 100644
> >> --- a/kernel/locking/lockdep.c
> >> +++ b/kernel/locking/lockdep.c
> >> @@ -4245,8 +4245,6 @@ void print_irqtrace_events(struct task_struct *curr)
> >>  {
> >>  	const struct irqtrace_events *trace = &curr->irqtrace;
> >>  
> >> -	nbcon_cpu_emergency_enter();
> >> -
> >>  	printk("irq event stamp: %u\n", trace->irq_events);
> >>  	printk("hardirqs last  enabled at (%u): [<%px>] %pS\n",
> >>  		trace->hardirq_enable_event, (void *)trace->hardirq_enable_ip,
> >> @@ -4260,8 +4258,6 @@ void print_irqtrace_events(struct task_struct *curr)
> >>  	printk("softirqs last disabled at (%u): [<%px>] %pS\n",
> >>  		trace->softirq_disable_event, (void *)trace->softirq_disable_ip,
> >>  		(void *)trace->softirq_disable_ip);
> >> -
> >> -	nbcon_cpu_emergency_exit();
> >>  }
> >>  
> >>  static int HARDIRQ_verbose(struct lock_class *class)
> >> @@ -5797,8 +5793,11 @@ static noinstr void check_flags(unsigned long flags)
> >>  	}
> >>  #endif
> >>  
> >> -	if (!debug_locks)
> >> +	if (!debug_locks) {
> >> +		nbcon_cpu_emergency_enter();
> >>  		print_irqtrace_events(current);
> >> +		nbcon_cpu_emergency_exit();
> >> +	}
> >>  
> >>  	instrumentation_end();
> >>  #endif
> >
> > Yes, but it was unclear to me what were the invocations of
> > print_irqtrace_events() that needed the emergency turned on.
> >
> > how did you decided that only check_flags() needed it?
> 
> The emergency enter/exit's are intended for lockdep splats. AFAICT
> check_flags() was the only call to print_irqtrace_events() that was not
> already in emergency state for lockdep splats.
>
> KCSAN is not the only non-lockdep caller of print_irqtrace_events(). So
> my suggested fix applies to the other non-lockdep users as well. Commit
> 59cd94ef8009 ("lockdep: Mark emergency sections in lockdep splats") was
> only intended for lockdep splats.

I agree with this reasoning. Well, more messages might be printed
in check_flags(). IMHO, we should print them all inside
nbcon_cpu_emergency_enter()/exit(). I mean:

--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -5769,6 +5769,7 @@ static noinstr void check_flags(unsigned long flags)
 
 	/* Get the warning out..  */
 	instrumentation_begin();
+	nbcon_cpu_emergency_enter();
 
 	if (irqs_disabled_flags(flags)) {
 		if (DEBUG_LOCKS_WARN_ON(lockdep_hardirqs_enabled())) {
@@ -5800,6 +5801,7 @@ static noinstr void check_flags(unsigned long flags)
 	if (!debug_locks)
 		print_irqtrace_events(current);
 
+	nbcon_cpu_emergency_exit();
 	instrumentation_end();
 #endif
 }

And there seems to be one more lockdep-caller of
print_irqtrace_events():

--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -4649,6 +4649,8 @@ void lockdep_cleanup_dead_cpu(unsigned int cpu, struct task_struct *idle)
 	if (unlikely(!debug_locks))
 		return;
 
+	nbcon_cpu_emergency_enter();
+
 	if (unlikely(per_cpu(hardirqs_enabled, cpu))) {
 		pr_warn("CPU %u left hardirqs enabled!", cpu);
 		if (idle)
@@ -4656,6 +4658,8 @@ void lockdep_cleanup_dead_cpu(unsigned int cpu, struct task_struct *idle)
 		/* Clean it up for when the CPU comes online again. */
 		per_cpu(hardirqs_enabled, cpu) = 0;
 	}
+
+	nbcon_cpu_emergency_enter();
 }
 
 static int

What do you think, please?

Best Regards,
Petr

  reply	other threads:[~2026-11-05 10:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-04 11:32 [PATCH v2] kcsan: Don't enter an nbcon emergency section for verbose reports Breno Leitao
2026-11-04 12:46 ` John Ogness
2026-11-04 14:33   ` Breno Leitao
2026-11-04 14:42     ` John Ogness
2026-11-05  9:59       ` Petr Mladek [this message]
2026-11-05 10:39         ` Breno Leitao
2026-11-05 10:59         ` John Ogness

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=auxTn4YuYHUOt4ml@pathway.suse.cz \
    --to=pmladek@suse.com \
    --cc=boqun@kernel.org \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=john.ogness@linutronix.de \
    --cc=kasan-dev@googlegroups.com \
    --cc=kernel-team@meta.com \
    --cc=leitao@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --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.