From: Frederic Weisbecker <frederic@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>,
Joel Fernandes <joel@joelfernandes.org>,
Thomas Gleixner <tglx@linutronix.de>,
vineethrp@gmail.com
Subject: [PATCH 5/5] timers: Tag (hr)timer softirq as hotplug safe
Date: Tue, 12 Sep 2023 12:44:06 +0200 [thread overview]
Message-ID: <20230912104406.312185-6-frederic@kernel.org> (raw)
In-Reply-To: <20230912104406.312185-1-frederic@kernel.org>
Specific stress involving frequent CPU-hotplug operations, such as
running rcutorture for example, may trigger the following message:
"NOHZ tick-stop error: local softirq work is pending, handler #02!!!"
This happens in the CPU-down hotplug process, after
CPUHP_AP_SMPBOOT_THREADS whose teardown callback parks ksoftirqd, and
before the target CPU shuts down through CPUHP_AP_IDLE_DEAD. In this
fragile intermediate state, softirqs waiting for threaded handling may
be forever ignored and eventually reported by the idle task as in the
above example.
However some vectors are known to be safe as long as the corresponding
subsystems have teardown callbacks handling the migration of their
events. The above error message reports pending timers softirq although
this vector can be considered as hotplug safe because the
CPUHP_TIMERS_PREPARE teardown callback performs the necessary migration
of timers after the death of the CPU. Hrtimers also have a similar
hotplug handling.
Therefore this error message, as far as (hr-)timers are concerned, can
be considered spurious and the relevant softirq vectors can be marked as
hotplug safe.
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
---
include/linux/interrupt.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index a92bce40b04b..4a1dc88ddbff 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -569,8 +569,12 @@ enum
* 2) rcu_report_dead() reports the final quiescent states.
*
* _ IRQ_POLL: irq_poll_cpu_dead() migrates the queue
+ *
+ * _ (HR)TIMER_SOFTIRQ: (hr)timers_dead_cpu() migrates the queue
*/
-#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ) | BIT(IRQ_POLL_SOFTIRQ))
+#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(TIMER_SOFTIRQ) | BIT(IRQ_POLL_SOFTIRQ) |\
+ BIT(HRTIMER_SOFTIRQ) | BIT(RCU_SOFTIRQ))
+
/* map softirq index to softirq name. update 'softirq_to_name' in
* kernel/softirq.c when adding a new softirq.
--
2.34.1
next prev parent reply other threads:[~2023-09-12 10:45 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-12 10:44 [PATCH 0/5] tick/nohz: cleanups and fixes v2 Frederic Weisbecker
2023-09-12 10:44 ` [PATCH 1/5] tick/nohz: Rename the tick handlers to more self-explanatory names Frederic Weisbecker
2023-09-27 15:01 ` [tip: timers/core] " tip-bot2 for Frederic Weisbecker
2023-09-12 10:44 ` [PATCH 2/5] tick/nohz: Update obsolete comments Frederic Weisbecker
2023-09-27 15:01 ` [tip: timers/core] " tip-bot2 for Frederic Weisbecker
2023-09-28 9:07 ` [PATCH] tick/nohz: Update comments some more Ingo Molnar
2023-09-28 9:11 ` Ingo Molnar
2023-09-29 10:57 ` Frederic Weisbecker
2023-09-29 21:09 ` Ingo Molnar
2023-09-29 22:05 ` Frederic Weisbecker
2023-09-29 21:12 ` [tip: timers/core] " tip-bot2 for Ingo Molnar
2023-09-12 10:44 ` [PATCH 3/5] tick/nohz: Don't shutdown the lowres tick from itself Frederic Weisbecker
2023-09-14 1:17 ` Joel Fernandes
2023-09-14 9:29 ` Frederic Weisbecker
2023-09-14 13:26 ` Joel Fernandes
2023-09-27 15:01 ` [tip: timers/core] " tip-bot2 for Frederic Weisbecker
2023-09-12 10:44 ` [PATCH 4/5] tick/nohz: remove unused tick_nohz_idle_stop_tick_protected() Frederic Weisbecker
2023-09-27 15:01 ` [tip: timers/core] tick/nohz: Remove " tip-bot2 for Xueshi Hu
2023-09-12 10:44 ` Frederic Weisbecker [this message]
2023-09-16 1:38 ` [PATCH 5/5] timers: Tag (hr)timer softirq as hotplug safe Joel Fernandes
2023-09-18 17:04 ` Thomas Gleixner
2023-09-27 15:01 ` [tip: timers/core] " tip-bot2 for Frederic Weisbecker
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=20230912104406.312185-6-frederic@kernel.org \
--to=frederic@kernel.org \
--cc=joel@joelfernandes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=vineethrp@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