Commit 2ec8efe6 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

cpuidle, mwait: Make the mwait code noinstr clean

objtool found a few cases where this code called out into instrumented
code:

  vmlinux.o: warning: objtool: intel_idle_s2idle+0x6e: call to __monitor.constprop.0() leaves .noinstr.text section
  vmlinux.o: warning: objtool: intel_idle_irq+0x8c: call to __monitor.constprop.0() leaves .noinstr.text section
  vmlinux.o: warning: objtool: intel_idle+0x73: call to __monitor.constprop.0() leaves .noinstr.text section

  vmlinux.o: warning: objtool: mwait_idle+0x88: call to clflush() leaves .noinstr.text section

Fix it by marking the affected methods as __always_inline.
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Tested-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: default avatarFrederic Weisbecker <frederic@kernel.org>
Link: https://lore.kernel.org/r/20230112195541.050542952@infradead.org
parent e4df1511
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define TPAUSE_C01_STATE 1 #define TPAUSE_C01_STATE 1
#define TPAUSE_C02_STATE 0 #define TPAUSE_C02_STATE 0
static inline void __monitor(const void *eax, unsigned long ecx, static __always_inline void __monitor(const void *eax, unsigned long ecx,
unsigned long edx) unsigned long edx)
{ {
/* "monitor %eax, %ecx, %edx;" */ /* "monitor %eax, %ecx, %edx;" */
...@@ -34,7 +34,7 @@ static inline void __monitor(const void *eax, unsigned long ecx, ...@@ -34,7 +34,7 @@ static inline void __monitor(const void *eax, unsigned long ecx,
:: "a" (eax), "c" (ecx), "d"(edx)); :: "a" (eax), "c" (ecx), "d"(edx));
} }
static inline void __monitorx(const void *eax, unsigned long ecx, static __always_inline void __monitorx(const void *eax, unsigned long ecx,
unsigned long edx) unsigned long edx)
{ {
/* "monitorx %eax, %ecx, %edx;" */ /* "monitorx %eax, %ecx, %edx;" */
...@@ -42,7 +42,7 @@ static inline void __monitorx(const void *eax, unsigned long ecx, ...@@ -42,7 +42,7 @@ static inline void __monitorx(const void *eax, unsigned long ecx,
:: "a" (eax), "c" (ecx), "d"(edx)); :: "a" (eax), "c" (ecx), "d"(edx));
} }
static inline void __mwait(unsigned long eax, unsigned long ecx) static __always_inline void __mwait(unsigned long eax, unsigned long ecx)
{ {
mds_idle_clear_cpu_buffers(); mds_idle_clear_cpu_buffers();
...@@ -77,8 +77,8 @@ static inline void __mwait(unsigned long eax, unsigned long ecx) ...@@ -77,8 +77,8 @@ static inline void __mwait(unsigned long eax, unsigned long ecx)
* EAX (logical) address to monitor * EAX (logical) address to monitor
* ECX #GP if not zero * ECX #GP if not zero
*/ */
static inline void __mwaitx(unsigned long eax, unsigned long ebx, static __always_inline void __mwaitx(unsigned long eax, unsigned long ebx,
unsigned long ecx) unsigned long ecx)
{ {
/* No MDS buffer clear as this is AMD/HYGON only */ /* No MDS buffer clear as this is AMD/HYGON only */
...@@ -87,7 +87,7 @@ static inline void __mwaitx(unsigned long eax, unsigned long ebx, ...@@ -87,7 +87,7 @@ static inline void __mwaitx(unsigned long eax, unsigned long ebx,
:: "a" (eax), "b" (ebx), "c" (ecx)); :: "a" (eax), "b" (ebx), "c" (ecx));
} }
static inline void __sti_mwait(unsigned long eax, unsigned long ecx) static __always_inline void __sti_mwait(unsigned long eax, unsigned long ecx)
{ {
mds_idle_clear_cpu_buffers(); mds_idle_clear_cpu_buffers();
/* "mwait %eax, %ecx;" */ /* "mwait %eax, %ecx;" */
......
...@@ -196,7 +196,7 @@ static inline void load_gs_index(unsigned int selector) ...@@ -196,7 +196,7 @@ static inline void load_gs_index(unsigned int selector)
#endif /* CONFIG_PARAVIRT_XXL */ #endif /* CONFIG_PARAVIRT_XXL */
static inline void clflush(volatile void *__p) static __always_inline void clflush(volatile void *__p)
{ {
asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p)); asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment