Commit c3982c1a authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

cpuidle, tdx: Make TDX code noinstr clean

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

  vmlinux.o: warning: objtool: __halt+0x2c: call to hcall_func.constprop.0() leaves .noinstr.text section
  vmlinux.o: warning: objtool: __halt+0x3f: call to __tdx_hypercall() leaves .noinstr.text section
  vmlinux.o: warning: objtool: __tdx_hypercall+0x66: call to __tdx_hypercall_failed() leaves .noinstr.text section

Fix it by:

  - moving TDX tdcall assembly methods into .noinstr.text (they are already noistr-clean)
  - marking __tdx_hypercall_failed() as 'noinstr'
  - annotating hcall_func() 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.111485720@infradead.org
parent 2ec8efe6
...@@ -34,6 +34,7 @@ SECTIONS ...@@ -34,6 +34,7 @@ SECTIONS
_text = .; /* Text */ _text = .; /* Text */
*(.text) *(.text)
*(.text.*) *(.text.*)
*(.noinstr.text)
_etext = . ; _etext = . ;
} }
.rodata : { .rodata : {
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
TDX_R12 | TDX_R13 | \ TDX_R12 | TDX_R13 | \
TDX_R14 | TDX_R15 ) TDX_R14 | TDX_R15 )
.section .noinstr.text, "ax"
/* /*
* __tdx_module_call() - Used by TDX guests to request services from * __tdx_module_call() - Used by TDX guests to request services from
* the TDX module (does not include VMM services) using TDCALL instruction. * the TDX module (does not include VMM services) using TDCALL instruction.
......
...@@ -64,8 +64,9 @@ static inline u64 _tdx_hypercall(u64 fn, u64 r12, u64 r13, u64 r14, u64 r15) ...@@ -64,8 +64,9 @@ static inline u64 _tdx_hypercall(u64 fn, u64 r12, u64 r13, u64 r14, u64 r15)
} }
/* Called from __tdx_hypercall() for unrecoverable failure */ /* Called from __tdx_hypercall() for unrecoverable failure */
void __tdx_hypercall_failed(void) noinstr void __tdx_hypercall_failed(void)
{ {
instrumentation_begin();
panic("TDVMCALL failed. TDX module bug?"); panic("TDVMCALL failed. TDX module bug?");
} }
...@@ -75,7 +76,7 @@ void __tdx_hypercall_failed(void) ...@@ -75,7 +76,7 @@ void __tdx_hypercall_failed(void)
* Reusing the KVM EXIT_REASON macros makes it easier to connect the host and * Reusing the KVM EXIT_REASON macros makes it easier to connect the host and
* guest sides of these calls. * guest sides of these calls.
*/ */
static u64 hcall_func(u64 exit_reason) static __always_inline u64 hcall_func(u64 exit_reason)
{ {
return exit_reason; return exit_reason;
} }
......
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