diff options
author | Miroslav Benes <mbenes@suse.cz> | 2020-03-26 10:26:03 +0100 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2020-03-30 17:32:10 +0200 |
commit | c3881eb58d56116c79ac4ee4f40fd15ead124c4b (patch) | |
tree | 1cd15be069bf435ff0ed342a019cd23ff2b4b3de /arch/x86/xen/xen-head.S | |
parent | x86/xen: Make the boot CPU idle task reliable (diff) | |
download | linux-dev-c3881eb58d56116c79ac4ee4f40fd15ead124c4b.tar.xz linux-dev-c3881eb58d56116c79ac4ee4f40fd15ead124c4b.zip |
x86/xen: Make the secondary CPU idle tasks reliable
The unwinder reports the secondary CPU idle tasks' stack on XEN PV as
unreliable, which affects at least live patching.
cpu_initialize_context() sets up the context of the CPU through
VCPUOP_initialise hypercall. After it is woken up, the idle task starts
in cpu_bringup_and_idle() function and its stack starts at the offset
right below pt_regs. The unwinder correctly detects the end of stack
there but it is confused by NULL return address in the last frame.
Introduce a wrapper in assembly, which just calls
cpu_bringup_and_idle(). The return address is thus pushed on the stack
and the wrapper contains the annotation hint for the unwinder regarding
the stack state.
Signed-off-by: Miroslav Benes <mbenes@suse.cz>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Diffstat (limited to 'arch/x86/xen/xen-head.S')
-rw-r--r-- | arch/x86/xen/xen-head.S | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S index d63806e1ff7a..7d1c4fcbe8f7 100644 --- a/arch/x86/xen/xen-head.S +++ b/arch/x86/xen/xen-head.S @@ -58,6 +58,16 @@ SYM_CODE_START(startup_xen) call xen_start_kernel SYM_CODE_END(startup_xen) __FINIT + +#ifdef CONFIG_XEN_PV_SMP +.pushsection .text +SYM_CODE_START(asm_cpu_bringup_and_idle) + UNWIND_HINT_EMPTY + + call cpu_bringup_and_idle +SYM_CODE_END(asm_cpu_bringup_and_idle) +.popsection +#endif #endif .pushsection .text |