Re: [tip: timers/nohz] tick/nohz: Add BLOCK_SOFTIRQ to the hotplug safe mask
From: Thomas Gleixner
Date: Tue Oct 20 2026 - 17:53:48 EST
On Sat, Sep 19 2026 at 21:05, tip-bot wrote:
> tick/nohz: Add BLOCK_SOFTIRQ to the hotplug safe mask
>
> During CPU-hotplug stress testing combined with an I/O workload, the
> following message is observed:
>
> "NOHZ tick-stop error: local softirq work is pending, handler #10!!!"
>
> On CPU offline, ksoftirqd is parked at CPUHP_AP_SMPBOOT_THREADS while the
> CPU still takes interrupts. A block completion raised after that point
> stays pending, and if the dying CPU goes idle before teardown,
> report_idle_softirq() sees it, keeps the tick alive and prints the error
> above.
>
> Such pending block completions on the outgoing CPU are drained later by
> blk_softirq_cpu_dead() (CPUHP_BLOCK_SOFTIRQ_DEAD), so a pending
> BLOCK_SOFTIRQ is harmless here. Add it to SOFTIRQ_HOTPLUG_SAFE_MASK like
> the other teardown-covered vectors.
In principle this is correct, but with partial hotplug it is not. It
might work by chance, but not by design.
Just use the sysfs interface to bring down the CPU to
CPUHP_AP_SCHED_WAIT_EMPTY. If a soft interrupt is raised in that state
which requires ksoftirqd then that might be delayed to the point where
an interrupt arrives and eventually handles it (or not).
That means all of this "safe" mask magic needs some thoughts.
Thanks,
tglx