From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: juri.lelli@redhat.com, rafael@kernel.org,
benh@kernel.crashing.org, linus.walleij@linaro.org,
bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
vincent.guittot@linaro.org, mpe@ellerman.id.au,
chenhuacai@kernel.org, linux-acpi@vger.kernel.org,
agross@kernel.org, geert@linux-m68k.org, linux-imx@nxp.com,
catalin.marinas@arm.com, xen-devel@lists.xenproject.org,
mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
pmladek@suse.com, linux-pm@vger.kernel.org,
jiangshanlai@gmail.com, Sascha Hauer <s.hauer@pengutronix.de>,
linux-um@lists.infradead.org, acme@kernel.org,
tglx@linutronix.de, linux-omap@vger.kernel.org,
dietmar.eggemann@arm.com, rth@twiddle.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
svens@linux.ibm.com, jolsa@kernel.org, paulus@samba.org,
mark.rutland@arm.com, linux-ia64@vger.kernel.org,
dave.hansen@linux.intel.com,
virtualization@lists.linux-foundation.org,
James.Bottomley@HansenPartnership.com, jcmvbkbc@gmail.com,
thierry.reding@gmail.com, kernel@xen0n.name,
quic_neeraju@quicinc.com, linux-s390@vger.kernel.org,
vschneid@redhat.com, john.ogness@linutronix.de,
ysato@users.sourceforge.jp, linux-sh@vger.kernel.org,
festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
jonathanh@nvidia.com, mathieu.desnoyers@efficios.com,
frederic@kernel.org, lenb@kernel.org,
linux-xtensa@linux-xtensa.org, kernel@pengutronix.de,
gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
shorne@gmail.com, linux-arm-kernel@lists.infradead.org,
chris@zankel.net, sboyd@kernel.org, dinguyen@kernel.org,
bristot@redhat.com, alexander.shishkin@linux.intel.com,
lpieralisi@kernel.org, linux@rasmusvillemoes.dk,
joel@joelfernandes.org, will@kernel.org,
boris.ostrovsky@oracle.com, khilman@kernel.org,
linux-csky@vger.kernel.org, pv-drivers@vmware.com,
linux-snps-arc@lists.infradead.org, mgorman@suse.de,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
ulli.kroll@googlemail.com, vgupta@kernel.org,
linux-clk@vger.kernel.org, josh@joshtriplett.org,
rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de,
bcain@quicinc.com, tsbogend@alpha.franken.de,
linux-parisc@vger.kernel.org, sudeep.holla@arm.com,
shawnguo@kernel.org, davem@davemloft.net, dalias@libc.org,
tony@atomide.com, amakhalov@vmware.com,
bjorn.andersson@linaro.org, hpa@zytor.com,
sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-riscv@lists.infradead.org, anton.ivanov@cambridgegreys.com,
jonas@southpole.se, yury.norov@gmail.com, richard@nod.at,
x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
aou@eecs.berkeley.edu, paulmck@kernel.org, hca@linux.ibm.com,
stefan.kristiansson@saunalahti.fi, openrisc@lists.librecores.org,
paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
jpoimboe@kernel.org, jgross@suse.com, monstr@monstr.eu,
linux-mips@vger.kernel.org, palmer@dabbelt.com,
anup@brainfault.org, ink@jurassic.park.msu.ru,
johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com,
vgupta@kernel.org, linux@armlinux.org.uk,
ulli.kroll@googlemail.com, linus.walleij@linaro.org,
shawnguo@kernel.org, Sascha Hauer <s.hauer@pengutronix.de>,
kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
tony@atomide.com, khilman@kernel.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, bcain@quicinc.com,
chenhuacai@kernel.org, kernel@xen0n.name, geert@linux-m68k.org,
sammy@sammy.net, monstr@monstr.eu, tsbogend@alpha.franken.de,
dinguyen@kernel.org, jonas@southpole.se,
stefan.kristiansson@saunalahti.fi, shorne@gmail.com,
James.Bottomley@HansenPartnership.com, deller@gmx.de,
mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org,
paul.walmsley@sifive.com, palmer@dabbelt.com,
aou@eecs.berkeley.edu, hca@linux.ibm.com, gor@linux.ibm.com,
agordeev@linux.ibm.com, borntraeger@linux.ibm.com,
svens@linux.ibm.com, ysato@users.sourceforge.jp, dalias@libc.org,
davem@davemloft.net, richard@nod.at,
anton.ivanov@cambridgegreys.com, johannes@sipsolutions.net,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
acme@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
namhyung@kernel.org, jgross@suse.com, srivatsa@csail.mit.edu,
amakhalov@vmware.com, pv-drivers@vmware.com,
boris.ostrovsky@oracle.com, chris@zankel.net, jcmvbkbc@gmail.com,
rafael@kernel.org, lenb@kernel.org, pavel@ucw.cz,
gregkh@linuxfoundation.org, mturquette@baylibre.com,
sboyd@kernel.org, daniel.lezcano@linaro.org,
lpieralisi@kernel.org, sudeep.holla@arm.com, agross@kernel.org,
bjorn.andersson@linaro.org, anup@brainfault.org,
thierry.reding@gmail.com, jonathanh@nvidia.com,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
yury.norov@gmail.com, andriy.shevchenko@linux.intel.com,
linux@rasmusvillemoes.dk, rostedt@goodmis.org, pmladek@suse.com,
senozhatsky@chromium.org, john.ogness@linutronix.de,
paulmck@kernel.org, frederic@kernel.org,
quic_neeraju@quicinc.com, josh@joshtriplett.org,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
joel@joelfernandes.org, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, jpoimboe@kernel.org,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-snps-arc@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-mips@vger.kernel.org, openrisc@lists.librecores.org,
linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-sh@vger.kernel.org, sparclinux@vger.kernel.org,
linux-um@lists.infradead.org, linux-perf-users@vger.kernel.org,
virtualization@lists.linux-foundation.org,
xen-devel@lists.xenproject.org, linux-xtensa@linux-xtensa.org,
linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
linux-clk@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org,
rcu@vger.kernel.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com,
vgupta@kernel.org, linux@armlinux.org.uk,
ulli.kroll@googlemail.com, linus.walleij@linaro.org,
shawnguo@kernel.org, Sascha Hauer <s.hauer@pengutronix.de>,
kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
tony@atomide.com, khilman@kernel.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, bcain@quicinc.com,
chenhuacai@kernel.org, kernel@xen0n.name, geert@linux-m68k.org,
sammy@sammy.net, monstr@monstr.eu, tsbogend@alpha.franken.de,
dinguyen@kernel.org, jonas@southpole.se,
stefan.kristiansson@saunalahti.fi, shorne@gmail.com,
James.Bottomley@HansenPartnership.com, deller@gmx.de,
mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org,
paul.walmsley@sifive.com, palmer@dabbelt.com,
aou@eecs.berkeley.edu, hca@linux.ibm.com, gor@linux.ibm.com,
agordeev@linux.ibm.com, borntraeger@linux.ibm.com,
svens@linux.ibm.com, ysato@users.sourceforge.jp, dalias@libc.org,
davem@davemloft.net, richard@nod.at,
anton.ivanov@cambridgegreys.com, johannes@sipsolutions.net,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
acme@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
namhyung@kernel.org, jgross@suse.com, srivatsa@csail.mit.edu,
amakhalov@vmware.com, pv-drivers@vmware.com,
boris.ostrovsky@oracle.com, chris@zankel.net, jcmvbkbc@gmail.com,
rafael@kernel.org, lenb@kernel.org, pavel@ucw.cz,
gregkh@linuxfoundation.org, mturquette@baylibre.com,
sboyd@kernel.org, daniel.lezcano@linaro.org,
lpieralisi@kernel.org, sudeep.holla@arm.com, agross@kernel.org,
bjorn.andersson@linaro.org, anup@brainfault.org,
thierry.reding@gmail.com, jonathanh@nvidia.com,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
yury.norov@gmail.com, andriy.shevchenko@linux.intel.com,
linux@rasmusvillemoes.dk, rostedt@goodmis.org, pmladek@suse.com,
senozhatsky@chromium.org, john.ogness@linutronix.de,
paulmck@kernel.org, frederic@kernel.org,
quic_neeraju@quicinc.com, josh@joshtriplett.org,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
joel@joelfernandes.org, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, jpoimboe@kernel.org,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-snps-arc@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-mips@vger.kernel.org, openrisc@lists.librecores.org,
linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-sh@vger.kernel.org, sparclinux@vger.kernel.org,
linux-um@lists.infradead.org, linux-perf-users@vger.kernel.org,
virtualization@lists.linux-foundation.org,
xen-devel@lists.xenproject.org, linux-xtensa@linux-xtensa.org,
linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
linux-clk@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org,
rcu@vger.kernel.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com,
vgupta@kernel.org, linux@armlinux.org.uk,
ulli.kroll@googlemail.com, linus.walleij@linaro.org,
shawnguo@kernel.org, Sascha Hauer <s.hauer@pengutronix.de>,
kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
tony@atomide.com, khilman@kernel.org, catalin.marinas@arm.com,
will@kernel.org, guoren@kernel.org, bcain@quicinc.com,
chenhuacai@kernel.org, kernel@xen0n.name, geert@linux-m68k.org,
sammy@sammy.net, monstr@monstr.eu, tsbogend@alpha.franken.de,
dinguyen@kernel.org, jonas@southpole.se,
stefan.kristiansson@saunalahti.fi, shorne@gmail.com,
James.Bottomley@HansenPartnership.com, deller@gmx.de,
mpe@ellerman.id.au, benh@kernel.crashing.org, paulus@samba.org,
paul.walmsley@sifive.com, palmer@dabbelt.com,
aou@eecs.berkeley.edu, hca@linux.ibm.com, gor@linux.ibm.com,
agordeev@linux.ibm.com, borntraeger@linux.ibm.com,
svens@linux.ibm.com, ysato@users.sourceforge.jp, dalias@libc.org,
davem@davemloft.net, richard@nod.at,
anton.ivanov@cambridgegreys.com, johannes@sipsolutions.net,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
acme@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
namhyung@kernel.org, jgross@suse.com, srivatsa@csail.mit.edu,
amakhalov@vmware.com, pv-drivers@vmware.com,
boris.ostrovsky@oracle.com, chris@zankel.net, jcmvbkbc@gmail.com,
rafael@kernel.org, lenb@kernel.org, pavel@ucw.cz,
gregkh@linuxfoundation.org, mturquette@baylibre.com,
sboyd@kernel.org, daniel.lezcano@linaro.org,
lpieralisi@kernel.org, sudeep.holla@arm.com, agross@kernel.org,
bjorn.andersson@linaro.org, anup@brainfault.org,
thierry.reding@gmail.com, jonathanh@nvidia.com,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
yury.norov@gmail.com, andriy.shevchenko@linux.intel.com,
linux@rasmusvillemoes.dk, rostedt@goodmis.org, pmladek@suse.com,
senozhatsky@chromium.org, john.ogness@linutronix.de,
paulmck@kernel.org, frederic@kernel.org,
quic_neeraju@quicinc.com, josh@joshtriplett.org,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
joel@joelfernandes.org, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, jpoimboe@kernel.org,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-snps-arc@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-mips@vger.kernel.org, openrisc@lists.librecores.org,
linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-sh@vger.kernel.org, sparclinux@vger.kernel.org,
linux-um@lists.infradead.org, linux-perf-users@vger.kernel.org,
virtualization@lists.linux-foundation.org,
xen-devel@lists.xenproject.org, linux-xtensa@linux-xtensa.org,
linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
linux-clk@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org,
rcu@vger.kernel.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: juri.lelli@redhat.com, rafael@kernel.org,
benh@kernel.crashing.org, linus.walleij@linaro.org,
bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
agordeev@linux.ibm.com, srivatsa@csail.mit.edu,
linux-arch@vger.kernel.org, vincent.guittot@linaro.org,
mpe@ellerman.id.au, chenhuacai@kernel.org,
linux-acpi@vger.kernel.org, agross@kernel.org, linux-imx@nxp.com,
catalin.marinas@arm.com, xen-devel@lists.xenproject.org,
mattst88@gmail.com, borntraeger@linux.ibm.com,
mturquette@baylibre.com, sammy@sammy.net, pmladek@suse.com,
linux-pm@vger.kernel.org, jiangshanlai@gmail.com,
Sascha Hauer <s.hauer@pengutronix.de>,
linux-um@lists.infradead.org, acme@kernel.org,
tglx@linutronix.de, linux-omap@vger.kernel.org,
dietmar.eggemann@arm.com, rth@twiddle.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
svens@linux.ibm.com, jolsa@kernel.org, paulus@samba.org,
mark.rutland@arm.com, linux-ia64@vger.kernel.org,
dave.hansen@linux.intel.com,
virtualization@lists.linux-foundation.org,
James.Bottomley@HansenPartnership.com, jcmvbkbc@gmail.com,
thierry.reding@gmail.com, kernel@xen0n.name,
quic_neeraju@quicinc.com, linux-s390@vger.kernel.org,
vschneid@redhat.com, john.ogness@linutronix.de,
ysato@users.sourceforge.jp, linux-sh@vger.kernel.org,
festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
jonathanh@nvidia.com, mathieu.desnoyers@efficios.com,
frederic@kernel.org, lenb@kernel.org,
linux-xtensa@linux-xtensa.org, kernel@pengutronix.de,
gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-arm-kernel@lists.infradead.org, chris@zankel.net,
sboyd@kernel.org, dinguyen@kernel.org, bristot@redhat.com,
alexander.shishkin@linux.intel.com, lpieralisi@kernel.org,
linux@rasmusvillemoes.dk, joel@joelfernandes.org,
will@kernel.org, boris.ostrovsky@oracle.com, khilman@kernel.org,
linux-csky@vger.kernel.org, pv-drivers@vmware.com,
linux-snps-arc@lists.infradead.org, mgorman@suse.de,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
ulli.kroll@googlemail.com, vgupta@kernel.org,
linux-clk@vger.kernel.org, josh@joshtriplett.org,
rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de,
bcain@quicinc.com, tsbogend@alpha.franken.de,
linux-parisc@vger.kernel.org, sudeep.holla@arm.com,
shawnguo@kernel.org, davem@davemloft.net, dalias@libc.org,
tony@atomide.com, amakhalov@vmware.com,
bjorn.andersson@linaro.org, hpa@zytor.com,
sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-riscv@lists.infradead.org, anton.ivanov@cambridgegreys.com,
jonas@southpole.se, yury.norov@gmail.com, richard@nod.at,
x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
aou@eecs.berkeley.edu, paulmck@kernel.org, hca@linux.ibm.com,
openrisc@lists.librecores.org, paul.walmsley@sifive.com,
linux-tegra@vger.kernel.org, namhyung@kernel.org,
andriy.shevchenko@linux.intel.com, jpoimboe@kernel.org,
jgross@suse.com, monstr@monstr.eu, linux-mips@vger.kernel.org,
palmer@dabbelt.com, anup@brainfault.org,
ink@jurassic.park.msu.ru, johannes@sipsolutions.net,
linuxppc-dev@lists.ozlabs.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: juri.lelli@redhat.com, rafael@kernel.org,
linus.walleij@linaro.org, bsegall@google.com, guoren@kernel.org,
pavel@ucw.cz, agordeev@linux.ibm.com, srivatsa@csail.mit.edu,
linux-arch@vger.kernel.org, vincent.guittot@linaro.org,
chenhuacai@kernel.org, linux-acpi@vger.kernel.org,
agross@kernel.org, geert@linux-m68k.org, linux-imx@nxp.com,
catalin.marinas@arm.com, xen-devel@lists.xenproject.org,
mattst88@gmail.com, borntraeger@linux.ibm.com,
mturquette@baylibre.com, sammy@sammy.net, pmladek@suse.com,
linux-pm@vger.kernel.org, jiangshanlai@gmail.com,
Sascha Hauer <s.hauer@pengutronix.de>,
linux-um@lists.infradead.org, acme@kernel.org,
tglx@linutronix.de, linux-omap@vger.kernel.org,
dietmar.eggemann@arm.com, rth@twiddle.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
svens@linux.ibm.com, jolsa@kernel.org, paulus@samba.org,
mark.rutland@arm.com, linux-ia64@vger.kernel.org,
dave.hansen@linux.intel.com,
virtualizatio n@lists.linux-foundation.org,
James.Bottomley@HansenPartnership.com, jcmvbkbc@gmail.com,
thierry.reding@gmail.com, kernel@xen0n.name,
quic_neeraju@quicinc.com, linux-s390@vger.kernel.org,
vschneid@redhat.com, john.ogness@linutronix.de,
ysato@users.sourceforge.jp, linux-sh@vger.kernel.org,
festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
jonathanh@nvidia.com, mathieu.desnoyers@efficios.com,
frederic@kernel.org, lenb@kernel.org,
linux-xtensa@linux-xtensa.org, kernel@pengutronix.de,
gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
shorne@gmail.com, linux-arm-kernel@lists.infradead.org,
chris@zankel.net, sboyd@kernel.org, dinguyen@kernel.org,
bristot@redhat.com, alexander.shishkin@linux.intel.com,
lpieralisi@kernel.org, linux@rasmusvillemoes.dk,
joel@joelfernandes.org, will@kernel.org,
boris.ostrovsky@oracle.com, khilman@kernel.org,
linux-csky@vger.kernel.org, pv-drivers@vmware.com,
linux-snps-arc@lists.infradea d.org, mgorman@suse.de,
jacob.jun.pan@linux.intel.com
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
, Arnd Bergmann <arnd@arndb.de>, ulli.kroll@googlemail.com, vgupta@kernel.org, linux-clk@vger.kernel.org, josh@joshtriplett.org, rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de, bcain@quicinc.com, tsbogend@alpha.franken.de, linux-parisc@vger.kernel.org, sudeep.holla@arm.com, shawnguo@kernel.org, davem@davemloft.net, dalias@libc.org, tony@atomide.com, amakhalov@vmware.com, bjorn.andersson@linaro.org, hpa@zytor.com, sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-riscv@lists.infradead.org, anton.ivanov@cambridgegreys.com, jonas@southpole.se, yury.norov@gmail.com, richard@nod.at, x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com, aou@eecs.berkeley.edu, paulmck@kernel.org, hca@linux.ibm.com, stefan.kristiansson@saunalahti.fi, openrisc@lists.librecores.org, paul.walmsley@sifive.com, linux-tegra@vger.kernel.org, namhyung@kernel.org, andriy.shevchenko@linux.intel.com, jpoimboe@kernel.org, jgross@suse.com, monstr@monstr.eu, linux-mips@vger.kernel.org, palmer@dab
belt.com, anup@brainfault.org, ink@jurassic.park.msu.ru, johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org
Sender: "Linuxppc-dev" <linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org>
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: juri.lelli@redhat.com, rafael@kernel.org,
benh@kernel.crashing.org, linus.walleij@linaro.org,
bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
vincent.guittot@linaro.org, mpe@ellerman.id.au,
chenhuacai@kernel.org, linux-acpi@vger.kernel.org,
agross@kernel.org, geert@linux-m68k.org, linux-imx@nxp.com,
catalin.marinas@arm.com, xen-devel@lists.xenproject.org,
mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
pmladek@suse.com, linux-pm@vger.kernel.org,
jiangshanlai@gmail.com, Sascha Hauer <s.hauer@pengutronix.de>,
linux-um@lists.infradead.org, acme@kernel.org,
tglx@linutronix.de, linux-omap@vger.kernel.org,
dietmar.eggemann@arm.com, rth@twiddle.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
svens@linux.ibm.com, jolsa@kernel.org, paulus@samba.org,
mark.rutland@arm.com, linux-ia64@vger.kernel.org,
dave.hansen@linux.intel.com,
virtualization@lists.linux-foundation.org,
James.Bottomley@HansenPartnership.com, jcmvbkbc@gmail.com,
thierry.reding@gmail.com, kernel@xen0n.name,
quic_neeraju@quicinc.com, linux-s390@vger.kernel.org,
vschneid@redhat.com, john.ogness@linutronix.de,
ysato@users.sourceforge.jp, linux-sh@vger.kernel.org,
festevam@gmail.com, deller@gmx.de, daniel.lezcano@linaro.org,
jonathanh@nvidia.com, mathieu.desnoyers@efficios.com,
frederic@kernel.org, lenb@kernel.org,
linux-xtensa@linux-xtensa.org, kernel@pengutronix.de,
gor@linux.ibm.com, linux-arm-msm@vger.kernel.org,
linux-alpha@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
shorne@gmail.com, linux-arm-kernel@lists.infradead.org,
chris@zankel.net, sboyd@kernel.org, dinguyen@kernel.org,
bristot@redhat.com, alexander.shishkin@linux.intel.com,
lpieralisi@kernel.org, linux@rasmusvillemoes.dk,
joel@joelfernandes.org, will@kernel.org,
boris.ostrovsky@oracle.com, khilman@kernel.org,
linux-csky@vger.kernel.org, pv-drivers@vmware.com,
linux-snps-arc@lists.infradead.org, mgorman@suse.de,
jacob.jun.pan@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
ulli.kroll@googlemail.com, vgupta@kernel.org,
linux-clk@vger.kernel.org, josh@joshtriplett.org,
rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de,
bcain@quicinc.com, tsbogend@alpha.franken.de,
linux-parisc@vger.kernel.org, sudeep.holla@arm.com,
shawnguo@kernel.org, davem@davemloft.net, dalias@libc.org,
tony@atomide.com, amakhalov@vmware.com,
bjorn.andersson@linaro.org, hpa@zytor.com,
sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
linux-riscv@lists.infradead.org, anton.ivanov@cambridgegreys.com,
jonas@southpole.se, yury.norov@gmail.com, richard@nod.at,
x86@kernel.org, linux@armlinux.org.uk, mingo@redhat.com,
aou@eecs.berkeley.edu, paulmck@kernel.org, hca@linux.ibm.com,
stefan.kristiansson@saunalahti.fi, openrisc@lists.librecores.org,
paul.walmsley@sifive.com, linux-tegra@vger.kernel.org,
namhyung@kernel.org, andriy.shevchenko@linux.intel.com,
jpoimboe@kernel.org, jgross@suse.com, monstr@monstr.eu,
linux-mips@vger.kernel.org, palmer@dabbelt.com,
anup@brainfault.org, ink@jurassic.park.msu.ru,
johannes@sipsolutions.net, linuxppc-dev@lists.ozlabs.org
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 14:27:42 +0000 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: peterz@infradead.org
Cc: juri.lelli@redhat.com, rafael@kernel.org,
benh@kernel.crashing.org, linus.walleij@linaro.org,
bsegall@google.com, guoren@kernel.org, pavel@ucw.cz,
agordeev@linux.ibm.com, linux-arch@vger.kernel.org,
vincent.guittot@linaro.org, mpe@ellerman.id.au,
chenhuacai@kernel.org, linux-acpi@vger.kernel.org,
agross@kernel.org, geert@linux-m68k.org, linux-imx@nxp.com,
catalin.marinas@arm.com, xen-devel@lists.xenproject.org,
mattst88@gmail.com, mturquette@baylibre.com, sammy@sammy.net,
pmladek@suse.com, linux-pm@vger.kernel.org,
jiangshanlai@gmail.com, Sascha Hauer <s.hauer@pengutronix.de>,
linux-um@lists.infradead.org, acme@kernel.org,
tglx@linutronix.de, linux-omap@vger.kernel.org,
dietmar.eggemann@arm.com, rth@twiddle.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, senozhatsky@chromium.org,
svens@linux.ibm.com, jolsa@kernel.org, paul
Subject: [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr
Date: Wed, 08 Jun 2022 16:27:42 +0200 [thread overview]
Message-ID: <20220608144517.124597382@infradead.org> (raw)
In-Reply-To: 20220608142723.103523089@infradead.org
Idle code is very like entry code in that RCU isn't available. As
such, add a little validation.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/alpha/kernel/vmlinux.lds.S | 1 -
arch/arc/kernel/vmlinux.lds.S | 1 -
arch/arm/include/asm/vmlinux.lds.h | 1 -
arch/arm64/kernel/vmlinux.lds.S | 1 -
arch/csky/kernel/vmlinux.lds.S | 1 -
arch/hexagon/kernel/vmlinux.lds.S | 1 -
arch/ia64/kernel/vmlinux.lds.S | 1 -
arch/loongarch/kernel/vmlinux.lds.S | 1 -
arch/m68k/kernel/vmlinux-nommu.lds | 1 -
arch/m68k/kernel/vmlinux-std.lds | 1 -
arch/m68k/kernel/vmlinux-sun3.lds | 1 -
arch/microblaze/kernel/vmlinux.lds.S | 1 -
arch/mips/kernel/vmlinux.lds.S | 1 -
arch/nios2/kernel/vmlinux.lds.S | 1 -
arch/openrisc/kernel/vmlinux.lds.S | 1 -
arch/parisc/kernel/vmlinux.lds.S | 1 -
arch/powerpc/kernel/vmlinux.lds.S | 1 -
arch/riscv/kernel/vmlinux-xip.lds.S | 1 -
arch/riscv/kernel/vmlinux.lds.S | 1 -
arch/s390/kernel/vmlinux.lds.S | 1 -
arch/sh/kernel/vmlinux.lds.S | 1 -
arch/sparc/kernel/vmlinux.lds.S | 1 -
arch/um/kernel/dyn.lds.S | 1 -
arch/um/kernel/uml.lds.S | 1 -
arch/x86/include/asm/irqflags.h | 11 ++++-------
arch/x86/include/asm/mwait.h | 2 +-
arch/x86/kernel/vmlinux.lds.S | 1 -
arch/xtensa/kernel/vmlinux.lds.S | 1 -
include/asm-generic/vmlinux.lds.h | 9 +++------
include/linux/compiler_types.h | 8 ++++++--
include/linux/cpu.h | 3 ---
kernel/module/main.c | 2 ++
kernel/sched/idle.c | 15 +++++++++++++--
tools/objtool/check.c | 15 ++++++++++++++-
34 files changed, 43 insertions(+), 48 deletions(-)
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -27,7 +27,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -85,7 +85,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -96,7 +96,6 @@
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
- CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
ARM_STUBS_TEXT \
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -163,7 +163,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
HYPERVISOR_TEXT
--- a/arch/csky/kernel/vmlinux.lds.S
+++ b/arch/csky/kernel/vmlinux.lds.S
@@ -38,7 +38,6 @@ SECTIONS
SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/hexagon/kernel/vmlinux.lds.S
+++ b/arch/hexagon/kernel/vmlinux.lds.S
@@ -41,7 +41,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
*(.fixup)
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -51,7 +51,6 @@ SECTIONS {
__end_ivt_text = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/loongarch/kernel/vmlinux.lds.S
+++ b/arch/loongarch/kernel/vmlinux.lds.S
@@ -40,7 +40,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -48,7 +48,6 @@ SECTIONS {
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
. = ALIGN(16);
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -19,7 +19,6 @@ SECTIONS
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
*(.gnu.warning)
--- a/arch/microblaze/kernel/vmlinux.lds.S
+++ b/arch/microblaze/kernel/vmlinux.lds.S
@@ -36,7 +36,6 @@ SECTIONS {
EXIT_TEXT
EXIT_CALL
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -61,7 +61,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/nios2/kernel/vmlinux.lds.S
+++ b/arch/nios2/kernel/vmlinux.lds.S
@@ -24,7 +24,6 @@ SECTIONS
.text : {
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -52,7 +52,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -86,7 +86,6 @@ SECTIONS
TEXT_TEXT
LOCK_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -107,7 +107,6 @@ SECTIONS
#endif
NOINSTR_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux-xip.lds.S
+++ b/arch/riscv/kernel/vmlinux-xip.lds.S
@@ -39,7 +39,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/riscv/kernel/vmlinux.lds.S
+++ b/arch/riscv/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ENTRY_TEXT
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -42,7 +42,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -29,7 +29,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -50,7 +50,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
IRQENTRY_TEXT
--- a/arch/um/kernel/dyn.lds.S
+++ b/arch/um/kernel/dyn.lds.S
@@ -74,7 +74,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/um/kernel/uml.lds.S
+++ b/arch/um/kernel/uml.lds.S
@@ -35,7 +35,6 @@ SECTIONS
_stext = .;
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -8,9 +8,6 @@
#include <asm/nospec-branch.h>
-/* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __section(".cpuidle.text")
-
/*
* Interrupt control:
*/
@@ -45,13 +42,13 @@ static __always_inline void native_irq_e
asm volatile("sti": : :"memory");
}
-static inline __cpuidle void native_safe_halt(void)
+static __always_inline void native_safe_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("sti; hlt": : :"memory");
}
-static inline __cpuidle void native_halt(void)
+static __always_inline void native_halt(void)
{
mds_idle_clear_cpu_buffers();
asm volatile("hlt": : :"memory");
@@ -84,7 +81,7 @@ static __always_inline void arch_local_i
* Used in the idle loop; sti takes one instruction cycle
* to complete:
*/
-static inline __cpuidle void arch_safe_halt(void)
+static __always_inline void arch_safe_halt(void)
{
native_safe_halt();
}
@@ -93,7 +90,7 @@ static inline __cpuidle void arch_safe_h
* Used when interrupts are already enabled or to
* shutdown the processor:
*/
-static inline __cpuidle void halt(void)
+static __always_inline void halt(void)
{
native_halt();
}
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -104,7 +104,7 @@ static inline void __sti_mwait(unsigned
* New with Core Duo processors, MWAIT can take some hints based on CPU
* capability.
*/
-static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
+static __always_inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (static_cpu_has_bug(X86_BUG_MONITOR) || !current_set_polling_and_test()) {
if (static_cpu_has_bug(X86_BUG_CLFLUSH_MONITOR)) {
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -129,7 +129,6 @@ SECTIONS
HEAD_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
KPROBES_TEXT
ALIGN_ENTRY_TEXT_BEGIN
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -125,7 +125,6 @@ SECTIONS
ENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
- CPUIDLE_TEXT
LOCK_TEXT
*(.fixup)
}
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -559,6 +559,9 @@
ALIGN_FUNCTION(); \
__noinstr_text_start = .; \
*(.noinstr.text) \
+ __cpuidle_text_start = .; \
+ *(.cpuidle.text) \
+ __cpuidle_text_end = .; \
__noinstr_text_end = .;
/*
@@ -600,12 +603,6 @@
*(.spinlock.text) \
__lock_text_end = .;
-#define CPUIDLE_TEXT \
- ALIGN_FUNCTION(); \
- __cpuidle_text_start = .; \
- *(.cpuidle.text) \
- __cpuidle_text_end = .;
-
#define KPROBES_TEXT \
ALIGN_FUNCTION(); \
__kprobes_text_start = .; \
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -225,10 +225,14 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
+#define __noinstr_section(section) \
+ noinline notrace __attribute((__section__(section))) \
__no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define noinstr __noinstr_section(".noinstr.text")
+
+#define __cpuidle __noinstr_section(".cpuidle.text")
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -171,9 +171,6 @@ void __noreturn cpu_startup_entry(enum c
void cpu_idle_poll_ctrl(bool enable);
-/* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle __section(".cpuidle.text")
-
bool cpu_in_idle(unsigned long pc);
void arch_cpu_idle(void);
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -376,7 +376,8 @@ static int decode_instructions(struct ob
sec->text = true;
if (!strcmp(sec->name, ".noinstr.text") ||
- !strcmp(sec->name, ".entry.text"))
+ !strcmp(sec->name, ".entry.text") ||
+ !strcmp(sec->name, ".cpuidle.text"))
sec->noinstr = true;
for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
@@ -3080,6 +3081,12 @@ static inline bool noinstr_call_dest(str
return true;
/*
+ * If the symbol is a static_call trampoline, we can't tell.
+ */
+ if (func->static_call_tramp)
+ return true;
+
+ /*
* The __ubsan_handle_*() calls are like WARN(), they only happen when
* something 'BAD' happened. At the risk of taking the machine down,
* let them proceed to get the message out.
@@ -3648,6 +3655,12 @@ static int validate_noinstr_sections(str
if (sec) {
warnings += validate_section(file, sec);
warnings += validate_unwind_hints(file, sec);
+ }
+
+ sec = find_section_by_name(file->elf, ".cpuidle.text");
+ if (sec) {
+ warnings += validate_section(file, sec);
+ warnings += validate_unwind_hints(file, sec);
}
return warnings;
next prev parent reply other threads:[~2022-06-08 14:47 UTC|newest]
Thread overview: 820+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-08 14:27 [PATCH 00/36] cpuidle,rcu: Cleanup the mess Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 01/36] x86/perf/amd: Remove tracing from perf_lopwr_cb() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 02/36] x86/idle: Replace x86_idle with a static_call Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 18:13 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 03/36] cpuidle/poll: Ensure IRQ state is invariant Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-07-06 13:51 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 04/36] cpuidle,intel_idle: Fix CPUIDLE_FLAG_IRQ_ENABLE Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:01 ` Rafael J. Wysocki
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 15:48 ` Peter Zijlstra
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-08 16:08 ` Rafael J. Wysocki
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-09 23:49 ` Jacob Pan
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-13 8:44 ` Peter Zijlstra
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-06-16 21:26 ` Jacob Pan
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-25 19:43 ` Michel Lespinasse
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-28 17:20 ` Paul E. McKenney
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 10:24 ` Michel Lespinasse
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-29 14:59 ` Rafael J. Wysocki
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 9:48 ` Michel Lespinasse
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 19:52 ` Rafael J. Wysocki
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-30 23:45 ` Michel Lespinasse
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:26 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-29 15:28 ` Paul E. McKenney
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 9:40 ` Michel Lespinasse
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-07-30 18:16 ` Paul E. McKenney
2022-06-08 14:27 ` [PATCH 05/36] cpuidle: Move IRQ state validation Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-07-06 13:54 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 06/36] cpuidle,riscv: Push RCU-idle into driver Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 07/36] cpuidle,tegra: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 08/36] cpuidle,psci: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 09/36] cpuidle,imx6: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 10/36] cpuidle,omap3: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-08 14:27 ` [PATCH 11/36] cpuidle,armada: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 12/36] cpuidle,omap2: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-13 12:33 ` Tony Lindgren
2022-06-08 14:27 ` [PATCH 13/36] cpuidle,dt: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 14/36] cpuidle: Fix rcu_idle_*() usage Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 12:41 ` Mark Rutland
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:40 ` Peter Zijlstra
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-06-14 16:59 ` Mark Rutland
2022-07-26 9:55 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-07-26 9:56 ` Gautham R. Shenoy
2022-06-08 14:27 ` [PATCH 15/36] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 15/36] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Peter Zijlstra
2022-06-08 14:27 ` [PATCH 15/36] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 15/36] cpuidle, cpu_pm: Remove RCU fiddling from cpu_pm_{enter, exit}() Peter Zijlstra
2022-06-14 16:13 ` [PATCH 15/36] cpuidle,cpu_pm: Remove RCU fiddling from cpu_pm_{enter,exit}() Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:13 ` Mark Rutland
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:42 ` Peter Zijlstra
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-14 16:53 ` Mark Rutland
2022-06-08 14:27 ` [PATCH 16/36] rcu: Fix rcu_idle_exit() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-14 16:14 ` Mark Rutland
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-15 0:44 ` Paul E. McKenney
2022-06-08 14:27 ` [PATCH 17/36] acpi_idle: Remove tracing Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 13:59 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 18/36] cpuidle: Annotate poll_idle() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 13:59 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-07-06 14:00 ` Rafael J. Wysocki
2022-06-08 14:27 ` Peter Zijlstra [this message]
2022-06-08 14:27 ` [PATCH 19/36] objtool/idle: Validate __cpuidle code as noinstr Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-07-06 9:46 ` Geert Uytterhoeven
2022-06-08 14:27 ` [PATCH 20/36] arch/idle: Change arch_cpu_idle() IRQ behaviour Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-08 16:22 ` Arnd Bergmann
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-06-14 16:22 ` Mark Rutland
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-07-06 14:02 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 21/36] x86/tdx: Remove TDX_HCALL_ISSUE_STI Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:26 ` Lai Jiangshan
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-13 8:41 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 22/36] arm,smp: Remove trace_.*_rcuidle() usage Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 23/36] arm64,smp: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-14 16:24 ` Mark Rutland
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-15 6:05 ` Marc Zyngier
2022-06-08 14:27 ` [PATCH 24/36] printk: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-09 9:16 ` Petr Mladek
2022-06-09 9:16 ` Petr Mladek
2022-06-09 9:16 ` Petr Mladek
2022-06-09 9:16 ` Petr Mladek
2022-06-09 9:16 ` Petr Mladek
2022-06-09 9:16 ` Petr Mladek via Virtualization
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 10:02 ` Peter Zijlstra
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 11:30 ` Sergey Senozhatsky
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek
2022-06-09 13:02 ` Petr Mladek via Virtualization
2022-06-09 13:02 ` Petr Mladek
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-11 2:33 ` Sergey Senozhatsky
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-14 14:37 ` Steven Rostedt
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek
2022-06-09 13:06 ` Petr Mladek via Virtualization
2022-06-09 13:06 ` Petr Mladek
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-11 2:23 ` Sergey Senozhatsky
2022-06-09 10:14 ` Petr Mladek
2022-06-09 10:14 ` Petr Mladek
2022-06-09 10:14 ` Petr Mladek
2022-06-09 10:14 ` Petr Mladek
2022-06-09 10:14 ` Petr Mladek
2022-06-09 10:14 ` Petr Mladek via Virtualization
2022-06-08 14:27 ` [PATCH 25/36] time/tick-broadcast: Remove RCU_NONIDLE usage Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-14 16:28 ` Mark Rutland
2022-06-08 14:27 ` [PATCH 26/36] cpuidle,sched: Remove annotations from TIF_{POLLING_NRFLAG,NEED_RESCHED} Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 26/36] cpuidle, sched: Remove annotations from TIF_{POLLING_NRFLAG, NEED_RESCHED} Peter Zijlstra
2022-06-08 14:27 ` [PATCH 26/36] cpuidle,sched: Remove annotations from TIF_{POLLING_NRFLAG,NEED_RESCHED} Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 26/36] cpuidle, sched: Remove annotations from TIF_{POLLING_NRFLAG, NEED_RESCHED} Peter Zijlstra
2022-06-08 14:27 ` [PATCH 27/36] cpuidle,mwait: Make noinstr clean Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 28/36] cpuidle,tdx: Make tdx " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 29/36] cpuidle,xenpv: Make more PARAVIRT_XXL " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-13 18:48 ` Srivatsa S. Bhat
2022-06-13 18:48 ` [PATCH 29/36] cpuidle, xenpv: " Srivatsa S. Bhat
2022-06-13 18:48 ` [PATCH 29/36] cpuidle,xenpv: " Srivatsa S. Bhat
2022-06-13 18:48 ` Srivatsa S. Bhat
2022-06-13 18:48 ` [PATCH 29/36] cpuidle, xenpv: " Srivatsa S. Bhat
2022-06-13 18:48 ` [PATCH 29/36] cpuidle,xenpv: " Srivatsa S. Bhat
2022-06-13 18:48 ` Srivatsa S. Bhat
2022-06-13 18:48 ` [PATCH 29/36] cpuidle, xenpv: " Srivatsa S. Bhat
2022-06-13 19:23 ` [Pv-drivers] " Nadav Amit
2022-06-13 19:23 ` Nadav Amit via Virtualization
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit
2022-06-13 19:23 ` Nadav Amit via Virtualization
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-14 16:44 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 30/36] cpuidle,nospec: Make " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 31/36] cpuidle,acpi: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-07-06 14:04 ` Rafael J. Wysocki
2022-06-08 14:27 ` [PATCH 32/36] ftrace: WARN on rcuidle Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 33/36] cpuidle,omap3: Use WFI for omap3_pm_idle() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-08 16:28 ` Arnd Bergmann
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 7:39 ` Tony Lindgren
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:47 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-09 9:40 ` Peter Zijlstra
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-13 12:36 ` Tony Lindgren
2022-06-08 14:27 ` [PATCH 34/36] cpuidle,omap3: Push RCU-idle into omap_sram_idle() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-13 12:35 ` Tony Lindgren
2022-06-08 15:04 ` Peter Zijlstra
2022-06-08 15:04 ` Peter Zijlstra
2022-06-13 12:39 ` [PATCH 34.5/36] cpuidle,omap4: Push RCU-idle into omap4_enter_lowpower() Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-13 12:39 ` Tony Lindgren
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-14 22:12 ` Peter Zijlstra
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2022-06-15 5:35 ` Tony Lindgren
2023-01-13 12:31 ` [tip: sched/core] cpuidle, OMAP4: " tip-bot2 for Tony Lindgren
2022-06-08 14:27 ` [PATCH 35/36] cpuidle,powerdomain: Remove trace_.*_rcuidle() Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` [PATCH 36/36] cpuidle,clk: " Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 14:27 ` Peter Zijlstra
2022-06-08 20:03 ` Stephen Boyd
2022-06-08 20:03 ` Stephen Boyd
2022-06-08 20:03 ` Stephen Boyd
2022-06-08 20:03 ` Stephen Boyd
2022-06-14 11:19 ` [PATCH 00/36] cpuidle,rcu: Cleanup the mess Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 11:19 ` Mark Rutland
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 16:58 ` Peter Zijlstra
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
2022-06-14 17:33 ` Mark Rutland
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=20220608144517.124597382@infradead.org \
--to=peterz@infradead.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=acme@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=agross@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=amakhalov@vmware.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=arnd@arndb.de \
--cc=bcain@quicinc.com \
--cc=benh@kernel.crashing.org \
--cc=bjorn.andersson@linaro.org \
--cc=boris.ostrovsky@oracle.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=dalias@libc.org \
--cc=daniel.lezcano@linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=dietmar.eggemann@arm.com \
--cc=dinguyen@kernel.org \
--cc=festevam@gmail.com \
--cc=frederic@kernel.org \
--cc=geert@linux-m68k.org \
--cc=gor@linux.ibm.com \
--cc=gregkh@linuxfoundation.org \
--cc=guoren@kernel.org \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=ink@jurassic.park.msu.ru \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jcmvbkbc@gmail.com \
--cc=jgross@suse.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=johannes@sipsolutions.net \
--cc=john.ogness@linutronix.de \
--cc=jolsa@kernel.org \
--cc=jonas@southpole.se \
--cc=jonathanh@nvidia.com \
--cc=josh@joshtriplett.org \
--cc=jpoimboe@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=kernel@pengutronix.de \
--cc=kernel@xen0n.name \
--cc=khilman@kernel.org \
--cc=lenb@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-hexagon@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=linux@armlinux.org.uk \
--cc=linux@rasmusvillemoes.dk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lpieralisi@kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mattst88@gmail.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=monstr@monstr.eu \
--cc=mpe@ellerman.id.au \
--cc=mturquette@baylibre.com \
--cc=namhyung@kernel.org \
--cc=openrisc@lists.librecores.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=paulmck@kernel.org \
--cc=paulus@samba.org \
--cc=pavel@ucw.cz \
--cc=pmladek@suse.com \
--cc=pv-drivers@vmware.com \
--cc=quic_neeraju@quicinc.com \
--cc=rafael@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=richard@nod.at \
--cc=rostedt@goodmis.org \
--cc=rth@twiddle.net \
--cc=s.hauer@pengutronix.de \
--cc=sammy@sammy.net \
--cc=sboyd@kernel.org \
--cc=senozhatsky@chromium.org \
--cc=shawnguo@kernel.org \
--cc=shorne@gmail.com \
--cc=sparclinux@vger.kernel.org \
--cc=stefan.kristiansson@saunalahti.fi \
--cc=sudeep.holla@arm.com \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=tony@atomide.com \
--cc=tsbogend@alpha.franken.de \
--cc=ulli.kroll@googlemail.com \
--cc=vgupta@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=ysato@users.sourceforge.jp \
--cc=yury.norov@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 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.