From: Josh Poimboeuf <jpoimboe@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: jgross@suse.com, richard.henderson@linaro.org,
ink@jurassic.park.msu.ru, mattst88@gmail.com,
linux-alpha@vger.kernel.org, linux@armlinux.org.uk,
linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, linux-csky@vger.kernel.org,
linux-ia64@vger.kernel.org, chenhuacai@kernel.org,
kernel@xen0n.name, loongarch@lists.linux.dev,
f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com,
tsbogend@alpha.franken.de, linux-mips@vger.kernel.org,
jiaxun.yang@flygoat.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, linuxppc-dev@lists.ozlabs.org,
ysato@users.sourceforge.jp, dalias@libc.org,
linux-sh@vger.kernel.org, davem@davemloft.net,
sparclinux@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, chris@zankel.net, jcmvbkbc@gmail.com,
linux-xtensa@linux-xtensa.org, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, rostedt@goodmis.org,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, paulmck@kernel.org
Subject: [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn
Date: Fri, 3 Feb 2023 14:05:09 -0800 [thread overview]
Message-ID: <cover.1675461757.git.jpoimboe@kernel.org> (raw)
These are some minor changes to enable the __noreturn attribute for
arch_cpu_idle_dead(). (If there are no objections, I can merge the
entire set through the tip tree.)
Until recently [1], in Xen, when a previously offlined CPU was brought
back online, it unexpectedly resumed execution where it left off in the
middle of the idle loop by returning from play_dead() and its caller
arch_cpu_idle_dead().
There were some clever hacks to make that work, but the behavior was
surprising as do_idle() doesn't expect an offlined CPU to return from
the dead in the middle of the function.
Now that Xen has been fixed, make sure arch_cpu_idle_dead() never
returns by marking it __noreturn. This causes the compiler to complain
if an arch-specific implementation might return. It also improves code
generation for both caller and callee.
Patches 1-20 update the arch-specific implementations of the function so
they don't actually return (even in error cases), and make that visible
to the compiler. That's typically done by ending the function with a
call to another noreturn function, or with a BUG().
Patch 21 fixes the weak implementation.
Patch 22 actually adds the __noreturn attribute.
[1] 076cbf5d2163 ("x86/xen: don't let xen_pv_play_dead() return")
Josh Poimboeuf (22):
alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration
alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm64/cpu: Mark cpu_die() __noreturn
csky/cpu: Make sure arch_cpu_idle_dead() doesn't return
ia64/cpu: Mark play_dead() __noreturn
loongarch/cpu: Make sure play_dead() doesn't return
loongarch/cpu: Mark play_dead() __noreturn
mips/cpu: Expose play_dead()'s prototype definition
mips/cpu: Make sure play_dead() doesn't return
mips/cpu: Mark play_dead() __noreturn
powerpc/cpu: Mark start_secondary_resume() __noreturn
sh/cpu: Make sure play_dead() doesn't return
sh/cpu: Mark play_dead() __noreturn
sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition
sparc/cpu: Mark cpu_play_dead() __noreturn
x86/cpu: Make sure play_dead() doesn't return
x86/cpu: Mark play_dead() __noreturn
xtensa/cpu: Make sure cpu_die() doesn't return
xtensa/cpu: Mark cpu_die() __noreturn
sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't
return
sched/idle: Mark arch_cpu_idle_dead() __noreturn
arch/alpha/kernel/process.c | 2 ++
arch/arm/kernel/smp.c | 2 ++
arch/arm64/include/asm/smp.h | 2 +-
arch/csky/kernel/smp.c | 2 ++
arch/ia64/kernel/process.c | 4 ++--
arch/loongarch/include/asm/smp.h | 2 +-
arch/loongarch/kernel/smp.c | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/smp-bmips.c | 3 +++
arch/mips/loongson64/smp.c | 1 +
arch/powerpc/include/asm/smp.h | 2 +-
arch/sh/include/asm/smp-ops.h | 5 +++--
arch/sh/kernel/idle.c | 1 +
arch/sparc/include/asm/smp_64.h | 2 +-
arch/x86/include/asm/smp.h | 3 ++-
arch/x86/kernel/process.c | 2 +-
arch/xtensa/include/asm/smp.h | 2 +-
arch/xtensa/kernel/smp.c | 2 ++
include/linux/cpu.h | 2 +-
kernel/sched/idle.c | 2 +-
tools/objtool/check.c | 1 +
21 files changed, 31 insertions(+), 15 deletions(-)
--
2.39.0
WARNING: multiple messages have this Message-ID (diff)
From: Josh Poimboeuf <jpoimboe@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: jgross@suse.com, richard.henderson@linaro.org,
ink@jurassic.park.msu.ru, mattst88@gmail.com,
linux-alpha@vger.kernel.org, linux@armlinux.org.uk,
linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, linux-csky@vger.kernel.org,
linux-ia64@vger.kernel.org, chenhuacai@kernel.org,
kernel@xen0n.name, loongarch@lists.linux.dev,
f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com,
tsbogend@alpha.franken.de, linux-mips@vger.kernel.org,
jiaxun.yang@flygoat.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, linuxppc-dev@lists.ozlabs.org,
ysato@users.sourceforge.jp, dalias@libc.org,
linux-sh@vger.kernel.org, davem@davemloft.net,
sparclinux@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, chris@zankel.net, jcmvbkbc@gmail.com,
linux-xtensa@linux-xtensa.org, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, rostedt@goodmis.org,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, paulmck@kernel.org
Subject: [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn
Date: Fri, 3 Feb 2023 14:05:09 -0800 [thread overview]
Message-ID: <cover.1675461757.git.jpoimboe@kernel.org> (raw)
These are some minor changes to enable the __noreturn attribute for
arch_cpu_idle_dead(). (If there are no objections, I can merge the
entire set through the tip tree.)
Until recently [1], in Xen, when a previously offlined CPU was brought
back online, it unexpectedly resumed execution where it left off in the
middle of the idle loop by returning from play_dead() and its caller
arch_cpu_idle_dead().
There were some clever hacks to make that work, but the behavior was
surprising as do_idle() doesn't expect an offlined CPU to return from
the dead in the middle of the function.
Now that Xen has been fixed, make sure arch_cpu_idle_dead() never
returns by marking it __noreturn. This causes the compiler to complain
if an arch-specific implementation might return. It also improves code
generation for both caller and callee.
Patches 1-20 update the arch-specific implementations of the function so
they don't actually return (even in error cases), and make that visible
to the compiler. That's typically done by ending the function with a
call to another noreturn function, or with a BUG().
Patch 21 fixes the weak implementation.
Patch 22 actually adds the __noreturn attribute.
[1] 076cbf5d2163 ("x86/xen: don't let xen_pv_play_dead() return")
Josh Poimboeuf (22):
alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration
alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm64/cpu: Mark cpu_die() __noreturn
csky/cpu: Make sure arch_cpu_idle_dead() doesn't return
ia64/cpu: Mark play_dead() __noreturn
loongarch/cpu: Make sure play_dead() doesn't return
loongarch/cpu: Mark play_dead() __noreturn
mips/cpu: Expose play_dead()'s prototype definition
mips/cpu: Make sure play_dead() doesn't return
mips/cpu: Mark play_dead() __noreturn
powerpc/cpu: Mark start_secondary_resume() __noreturn
sh/cpu: Make sure play_dead() doesn't return
sh/cpu: Mark play_dead() __noreturn
sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition
sparc/cpu: Mark cpu_play_dead() __noreturn
x86/cpu: Make sure play_dead() doesn't return
x86/cpu: Mark play_dead() __noreturn
xtensa/cpu: Make sure cpu_die() doesn't return
xtensa/cpu: Mark cpu_die() __noreturn
sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't
return
sched/idle: Mark arch_cpu_idle_dead() __noreturn
arch/alpha/kernel/process.c | 2 ++
arch/arm/kernel/smp.c | 2 ++
arch/arm64/include/asm/smp.h | 2 +-
arch/csky/kernel/smp.c | 2 ++
arch/ia64/kernel/process.c | 4 ++--
arch/loongarch/include/asm/smp.h | 2 +-
arch/loongarch/kernel/smp.c | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/smp-bmips.c | 3 +++
arch/mips/loongson64/smp.c | 1 +
arch/powerpc/include/asm/smp.h | 2 +-
arch/sh/include/asm/smp-ops.h | 5 +++--
arch/sh/kernel/idle.c | 1 +
arch/sparc/include/asm/smp_64.h | 2 +-
arch/x86/include/asm/smp.h | 3 ++-
arch/x86/kernel/process.c | 2 +-
arch/xtensa/include/asm/smp.h | 2 +-
arch/xtensa/kernel/smp.c | 2 ++
include/linux/cpu.h | 2 +-
kernel/sched/idle.c | 2 +-
tools/objtool/check.c | 1 +
21 files changed, 31 insertions(+), 15 deletions(-)
--
2.39.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Josh Poimboeuf <jpoimboe@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: juri.lelli@redhat.com, dalias@libc.org,
linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org,
peterz@infradead.org, catalin.marinas@arm.com,
dave.hansen@linux.intel.com, x86@kernel.org,
jiaxun.yang@flygoat.com, bsegall@google.com, jcmvbkbc@gmail.com,
guoren@kernel.org, hpa@zytor.com, sparclinux@vger.kernel.org,
kernel@xen0n.name, will@kernel.org, vschneid@redhat.com,
f.fainelli@gmail.com, vincent.guittot@linaro.org,
ysato@users.sourceforge.jp, chenhuacai@kernel.org,
linux@armlinux.org.uk, linux-csky@vger.kernel.org,
mingo@redhat.com, bcm-kernel-feedback-list@broadcom.com,
mgorman@suse.de, mattst88@gmail.com,
linux-xtensa@linux-xtensa.org, paulmck@kernel.org,
richard.henderson@linaro.org, npiggin@gmail.com,
ink@jurassic.park.msu.ru, rostedt@goodmis.org,
loongarch@lists.linux.dev, tglx@linutronix.de,
dietmar.eggemann@arm.com, linux-arm-kernel@lists.infradead.org,
jgross@suse.com, chris@zankel.net, tsbogend@alpha.franken.de,
bristot@redhat.com, linux-mips@vger.kernel.org,
linux-alph a@vger.kernel.org, bp@alien8.de,
linuxppc-dev@lists.ozlabs.org, davem@davemloft.net
Subject: [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn
Date: Fri, 3 Feb 2023 14:05:09 -0800 [thread overview]
Message-ID: <cover.1675461757.git.jpoimboe@kernel.org> (raw)
These are some minor changes to enable the __noreturn attribute for
arch_cpu_idle_dead(). (If there are no objections, I can merge the
entire set through the tip tree.)
Until recently [1], in Xen, when a previously offlined CPU was brought
back online, it unexpectedly resumed execution where it left off in the
middle of the idle loop by returning from play_dead() and its caller
arch_cpu_idle_dead().
There were some clever hacks to make that work, but the behavior was
surprising as do_idle() doesn't expect an offlined CPU to return from
the dead in the middle of the function.
Now that Xen has been fixed, make sure arch_cpu_idle_dead() never
returns by marking it __noreturn. This causes the compiler to complain
if an arch-specific implementation might return. It also improves code
generation for both caller and callee.
Patches 1-20 update the arch-specific implementations of the function so
they don't actually return (even in error cases), and make that visible
to the compiler. That's typically done by ending the function with a
call to another noreturn function, or with a BUG().
Patch 21 fixes the weak implementation.
Patch 22 actually adds the __noreturn attribute.
[1] 076cbf5d2163 ("x86/xen: don't let xen_pv_play_dead() return")
Josh Poimboeuf (22):
alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration
alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm64/cpu: Mark cpu_die() __noreturn
csky/cpu: Make sure arch_cpu_idle_dead() doesn't return
ia64/cpu: Mark play_dead() __noreturn
loongarch/cpu: Make sure play_dead() doesn't return
loongarch/cpu: Mark play_dead() __noreturn
mips/cpu: Expose play_dead()'s prototype definition
mips/cpu: Make sure play_dead() doesn't return
mips/cpu: Mark play_dead() __noreturn
powerpc/cpu: Mark start_secondary_resume() __noreturn
sh/cpu: Make sure play_dead() doesn't return
sh/cpu: Mark play_dead() __noreturn
sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition
sparc/cpu: Mark cpu_play_dead() __noreturn
x86/cpu: Make sure play_dead() doesn't return
x86/cpu: Mark play_dead() __noreturn
xtensa/cpu: Make sure cpu_die() doesn't return
xtensa/cpu: Mark cpu_die() __noreturn
sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't
return
sched/idle: Mark arch_cpu_idle_dead() __noreturn
arch/alpha/kernel/process.c | 2 ++
arch/arm/kernel/smp.c | 2 ++
arch/arm64/include/asm/smp.h | 2 +-
arch/csky/kernel/smp.c | 2 ++
arch/ia64/kernel/process.c | 4 ++--
arch/loongarch/include/asm/smp.h | 2 +-
arch/loongarch/kernel/smp.c | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/smp-bmips.c | 3 +++
arch/mips/loongson64/smp.c | 1 +
arch/powerpc/include/asm/smp.h | 2 +-
arch/sh/include/asm/smp-ops.h | 5 +++--
arch/sh/kernel/idle.c | 1 +
arch/sparc/include/asm/smp_64.h | 2 +-
arch/x86/include/asm/smp.h | 3 ++-
arch/x86/kernel/process.c | 2 +-
arch/xtensa/include/asm/smp.h | 2 +-
arch/xtensa/kernel/smp.c | 2 ++
include/linux/cpu.h | 2 +-
kernel/sched/idle.c | 2 +-
tools/objtool/check.c | 1 +
21 files changed, 31 insertions(+), 15 deletions(-)
--
2.39.0
WARNING: multiple messages have this Message-ID (diff)
From: Josh Poimboeuf <jpoimboe@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: jgross@suse.com, richard.henderson@linaro.org,
ink@jurassic.park.msu.ru, mattst88@gmail.com,
linux-alpha@vger.kernel.org, linux@armlinux.org.uk,
linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, linux-csky@vger.kernel.org,
linux-ia64@vger.kernel.org, chenhuacai@kernel.org,
kernel@xen0n.name, loongarch@lists.linux.dev,
f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com,
tsbogend@alpha.franken.de, linux-mips@vger.kernel.org,
jiaxun.yang@flygoat.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, linuxppc-dev@lists.ozlabs.org,
ysato@users.sourceforge.jp, dalias@libc.org,
linux-sh@vger.kernel.org, davem@davemloft.net,
sparclinux@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, chris@zankel.net, jcmvbkbc@gmail.com,
linux-xtensa@linux-xtensa.org, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, rostedt@goodmis.org,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, paulmck@kernel.org
Subject: [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn
Date: Fri, 03 Feb 2023 22:05:09 +0000 [thread overview]
Message-ID: <cover.1675461757.git.jpoimboe@kernel.org> (raw)
These are some minor changes to enable the __noreturn attribute for
arch_cpu_idle_dead(). (If there are no objections, I can merge the
entire set through the tip tree.)
Until recently [1], in Xen, when a previously offlined CPU was brought
back online, it unexpectedly resumed execution where it left off in the
middle of the idle loop by returning from play_dead() and its caller
arch_cpu_idle_dead().
There were some clever hacks to make that work, but the behavior was
surprising as do_idle() doesn't expect an offlined CPU to return from
the dead in the middle of the function.
Now that Xen has been fixed, make sure arch_cpu_idle_dead() never
returns by marking it __noreturn. This causes the compiler to complain
if an arch-specific implementation might return. It also improves code
generation for both caller and callee.
Patches 1-20 update the arch-specific implementations of the function so
they don't actually return (even in error cases), and make that visible
to the compiler. That's typically done by ending the function with a
call to another noreturn function, or with a BUG().
Patch 21 fixes the weak implementation.
Patch 22 actually adds the __noreturn attribute.
[1] 076cbf5d2163 ("x86/xen: don't let xen_pv_play_dead() return")
Josh Poimboeuf (22):
alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration
alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm64/cpu: Mark cpu_die() __noreturn
csky/cpu: Make sure arch_cpu_idle_dead() doesn't return
ia64/cpu: Mark play_dead() __noreturn
loongarch/cpu: Make sure play_dead() doesn't return
loongarch/cpu: Mark play_dead() __noreturn
mips/cpu: Expose play_dead()'s prototype definition
mips/cpu: Make sure play_dead() doesn't return
mips/cpu: Mark play_dead() __noreturn
powerpc/cpu: Mark start_secondary_resume() __noreturn
sh/cpu: Make sure play_dead() doesn't return
sh/cpu: Mark play_dead() __noreturn
sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition
sparc/cpu: Mark cpu_play_dead() __noreturn
x86/cpu: Make sure play_dead() doesn't return
x86/cpu: Mark play_dead() __noreturn
xtensa/cpu: Make sure cpu_die() doesn't return
xtensa/cpu: Mark cpu_die() __noreturn
sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't
return
sched/idle: Mark arch_cpu_idle_dead() __noreturn
arch/alpha/kernel/process.c | 2 ++
arch/arm/kernel/smp.c | 2 ++
arch/arm64/include/asm/smp.h | 2 +-
arch/csky/kernel/smp.c | 2 ++
arch/ia64/kernel/process.c | 4 ++--
arch/loongarch/include/asm/smp.h | 2 +-
arch/loongarch/kernel/smp.c | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/smp-bmips.c | 3 +++
arch/mips/loongson64/smp.c | 1 +
arch/powerpc/include/asm/smp.h | 2 +-
arch/sh/include/asm/smp-ops.h | 5 +++--
arch/sh/kernel/idle.c | 1 +
arch/sparc/include/asm/smp_64.h | 2 +-
arch/x86/include/asm/smp.h | 3 ++-
arch/x86/kernel/process.c | 2 +-
arch/xtensa/include/asm/smp.h | 2 +-
arch/xtensa/kernel/smp.c | 2 ++
include/linux/cpu.h | 2 +-
kernel/sched/idle.c | 2 +-
tools/objtool/check.c | 1 +
21 files changed, 31 insertions(+), 15 deletions(-)
--
2.39.0
WARNING: multiple messages have this Message-ID (diff)
From: Josh Poimboeuf <jpoimboe@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: jgross@suse.com, richard.henderson@linaro.org,
ink@jurassic.park.msu.ru, mattst88@gmail.com,
linux-alpha@vger.kernel.org, linux@armlinux.org.uk,
linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, linux-csky@vger.kernel.org,
linux-ia64@vger.kernel.org, chenhuacai@kernel.org,
kernel@xen0n.name, loongarch@lists.linux.dev,
f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com,
tsbogend@alpha.franken.de, linux-mips@vger.kernel.org,
jiaxun.yang@flygoat.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, linuxppc-dev@lists.ozlabs.org,
ysato@users.sourceforge.jp, dalias@libc.org,
linux-sh@vger.kernel.org, davem@davemloft.net,
sparclinux@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen
Subject: [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn
Date: Fri, 3 Feb 2023 14:05:09 -0800 [thread overview]
Message-ID: <cover.1675461757.git.jpoimboe@kernel.org> (raw)
These are some minor changes to enable the __noreturn attribute for
arch_cpu_idle_dead(). (If there are no objections, I can merge the
entire set through the tip tree.)
Until recently [1], in Xen, when a previously offlined CPU was brought
back online, it unexpectedly resumed execution where it left off in the
middle of the idle loop by returning from play_dead() and its caller
arch_cpu_idle_dead().
There were some clever hacks to make that work, but the behavior was
surprising as do_idle() doesn't expect an offlined CPU to return from
the dead in the middle of the function.
Now that Xen has been fixed, make sure arch_cpu_idle_dead() never
returns by marking it __noreturn. This causes the compiler to complain
if an arch-specific implementation might return. It also improves code
generation for both caller and callee.
Patches 1-20 update the arch-specific implementations of the function so
they don't actually return (even in error cases), and make that visible
to the compiler. That's typically done by ending the function with a
call to another noreturn function, or with a BUG().
Patch 21 fixes the weak implementation.
Patch 22 actually adds the __noreturn attribute.
[1] 076cbf5d2163 ("x86/xen: don't let xen_pv_play_dead() return")
Josh Poimboeuf (22):
alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration
alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm/cpu: Make sure arch_cpu_idle_dead() doesn't return
arm64/cpu: Mark cpu_die() __noreturn
csky/cpu: Make sure arch_cpu_idle_dead() doesn't return
ia64/cpu: Mark play_dead() __noreturn
loongarch/cpu: Make sure play_dead() doesn't return
loongarch/cpu: Mark play_dead() __noreturn
mips/cpu: Expose play_dead()'s prototype definition
mips/cpu: Make sure play_dead() doesn't return
mips/cpu: Mark play_dead() __noreturn
powerpc/cpu: Mark start_secondary_resume() __noreturn
sh/cpu: Make sure play_dead() doesn't return
sh/cpu: Mark play_dead() __noreturn
sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition
sparc/cpu: Mark cpu_play_dead() __noreturn
x86/cpu: Make sure play_dead() doesn't return
x86/cpu: Mark play_dead() __noreturn
xtensa/cpu: Make sure cpu_die() doesn't return
xtensa/cpu: Mark cpu_die() __noreturn
sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't
return
sched/idle: Mark arch_cpu_idle_dead() __noreturn
arch/alpha/kernel/process.c | 2 ++
arch/arm/kernel/smp.c | 2 ++
arch/arm64/include/asm/smp.h | 2 +-
arch/csky/kernel/smp.c | 2 ++
arch/ia64/kernel/process.c | 4 ++--
arch/loongarch/include/asm/smp.h | 2 +-
arch/loongarch/kernel/smp.c | 2 +-
arch/mips/include/asm/smp.h | 2 +-
arch/mips/kernel/smp-bmips.c | 3 +++
arch/mips/loongson64/smp.c | 1 +
arch/powerpc/include/asm/smp.h | 2 +-
arch/sh/include/asm/smp-ops.h | 5 +++--
arch/sh/kernel/idle.c | 1 +
arch/sparc/include/asm/smp_64.h | 2 +-
arch/x86/include/asm/smp.h | 3 ++-
arch/x86/kernel/process.c | 2 +-
arch/xtensa/include/asm/smp.h | 2 +-
arch/xtensa/kernel/smp.c | 2 ++
include/linux/cpu.h | 2 +-
kernel/sched/idle.c | 2 +-
tools/objtool/check.c | 1 +
21 files changed, 31 insertions(+), 15 deletions(-)
--
2.39.0
next reply other threads:[~2023-02-03 22:05 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-03 22:05 Josh Poimboeuf [this message]
2023-02-03 22:05 ` [PATCH 00/22] cpu,sched: Mark arch_cpu_idle_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 01/22] alpha/cpu: Expose arch_cpu_idle_dead()'s prototype declaration Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 02/22] alpha/cpu: Make sure arch_cpu_idle_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 03/22] arm/cpu: " Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 04/22] arm64/cpu: Mark cpu_die() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 05/22] csky/cpu: Make sure arch_cpu_idle_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-04 1:12 ` Guo Ren
2023-02-04 1:12 ` Guo Ren
2023-02-04 1:12 ` Guo Ren
2023-02-04 1:12 ` Guo Ren
2023-02-04 1:12 ` Guo Ren
2023-02-04 2:29 ` Josh Poimboeuf
2023-02-04 2:29 ` Josh Poimboeuf
2023-02-04 2:29 ` Josh Poimboeuf
2023-02-04 2:29 ` Josh Poimboeuf
2023-02-04 2:29 ` Josh Poimboeuf
2023-02-06 3:11 ` Guo Ren
2023-02-06 3:11 ` Guo Ren
2023-02-06 3:11 ` Guo Ren
2023-02-06 3:11 ` Guo Ren
2023-02-06 3:11 ` Guo Ren
2023-02-03 22:05 ` [PATCH 06/22] ia64/cpu: Mark play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 07/22] loongarch/cpu: Make sure play_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 08/22] loongarch/cpu: Mark play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 09/22] mips/cpu: Expose play_dead()'s prototype definition Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-03 22:05 ` [PATCH 10/22] mips/cpu: Make sure play_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-03 22:05 ` [PATCH 11/22] mips/cpu: Mark play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-06 22:36 ` Florian Fainelli
2023-02-03 22:05 ` [PATCH 12/22] powerpc/cpu: Mark start_secondary_resume() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-06 11:10 ` Michael Ellerman
2023-02-06 11:10 ` Michael Ellerman
2023-02-06 11:10 ` Michael Ellerman
2023-02-06 11:10 ` Michael Ellerman
2023-02-06 11:10 ` Michael Ellerman
2023-02-06 22:22 ` Josh Poimboeuf
2023-02-06 22:22 ` Josh Poimboeuf
2023-02-06 22:22 ` Josh Poimboeuf
2023-02-06 22:22 ` Josh Poimboeuf
2023-02-06 22:22 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 13/22] sh/cpu: Make sure play_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 14/22] sh/cpu: Mark play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 15/22] sh/cpu: Expose arch_cpu_idle_dead()'s prototype definition Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 16/22] sparc/cpu: Mark cpu_play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 17/22] x86/cpu: Make sure play_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 18/22] x86/cpu: Mark play_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 19/22] xtensa/cpu: Make sure cpu_die() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 20/22] xtensa/cpu: Mark cpu_die() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 21/22] sched/idle: Make sure weak version of arch_cpu_idle_dead() doesn't return Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` [PATCH 22/22] sched/idle: Mark arch_cpu_idle_dead() __noreturn Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-03 22:05 ` Josh Poimboeuf
2023-02-07 17:33 ` [PATCH v1.1 " Josh Poimboeuf
2023-02-07 17:33 ` Josh Poimboeuf
2023-02-07 17:33 ` Josh Poimboeuf
2023-02-07 17:33 ` Josh Poimboeuf
2023-02-07 17:33 ` Josh Poimboeuf
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=cover.1675461757.git.jpoimboe@kernel.org \
--to=jpoimboe@kernel.org \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bp@alien8.de \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=chris@zankel.net \
--cc=christophe.leroy@csgroup.eu \
--cc=dalias@libc.org \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=dietmar.eggemann@arm.com \
--cc=f.fainelli@gmail.com \
--cc=guoren@kernel.org \
--cc=hpa@zytor.com \
--cc=ink@jurassic.park.msu.ru \
--cc=jcmvbkbc@gmail.com \
--cc=jgross@suse.com \
--cc=jiaxun.yang@flygoat.com \
--cc=juri.lelli@redhat.com \
--cc=kernel@xen0n.name \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=mattst88@gmail.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=richard.henderson@linaro.org \
--cc=rostedt@goodmis.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tsbogend@alpha.franken.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=ysato@users.sourceforge.jp \
/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.