Message ID | cca346b5c87693499e630291d78fb0bf12c24290.1676358308.git.jpoimboe@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | cpu,sched: Mark arch_cpu_idle_dead() __noreturn | expand |
On Tue, Feb 14, 2023 at 11:48:41AM -0800, Max Filippov wrote: > On Tue, Feb 14, 2023 at 10:23 AM Josh Poimboeuf <jpoimboe@kernel.org> wrote: > > On Tue, Feb 14, 2023 at 08:55:32AM +0100, Philippe Mathieu-Daudé wrote: > > > Can you update the documentation along? Currently we have: > > > > > > /* > > > * Called from the idle thread for the CPU which has been shutdown. > > > * > > > * Note that we disable IRQs here, but do not re-enable them > > > * before returning to the caller. This is also the behaviour > > > * of the other hotplug-cpu capable cores, so presumably coming > > > * out of idle fixes this. > > > */ > > > > void __ref cpu_die(void) > > { > > idle_task_exit(); > > local_irq_disable(); > > __asm__ __volatile__( > > " movi a2, cpu_restart\n" > > " jx a2\n"); > > > > BUG(); > > } > > > > Hm, not only is the comment wrong, but it seems to be branching to > > cpu_restart? That doesn't seem right at all. > > Perhaps the name is a bit misleading. The CPU that enters 'cpu_restart' > loops there until a call to 'boot_secondary' releases it, after which it goes > to '_startup'. So it is a restart, but not immediate. Ah, I see. That sounds similar to what Xen does.
diff --git a/arch/xtensa/kernel/smp.c b/arch/xtensa/kernel/smp.c index 4dc109dd6214..7bad78495536 100644 --- a/arch/xtensa/kernel/smp.c +++ b/arch/xtensa/kernel/smp.c @@ -341,6 +341,8 @@ void __ref cpu_die(void) __asm__ __volatile__( " movi a2, cpu_restart\n" " jx a2\n"); + + BUG(); } #endif /* CONFIG_HOTPLUG_CPU */
cpu_die() doesn't return. Make that more explicit with a BUG(). BUG() is preferable to unreachable() because BUG() is a more explicit failure mode and avoids undefined behavior like falling off the edge of the function into whatever code happens to be next. Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> --- arch/xtensa/kernel/smp.c | 2 ++ 1 file changed, 2 insertions(+)