x86/xen: Make the secondary CPU idle tasks reliable
authorMiroslav Benes <mbenes@suse.cz>
Thu, 26 Mar 2020 09:26:03 +0000 (10:26 +0100)
committerJuergen Gross <jgross@suse.com>
Mon, 30 Mar 2020 15:32:10 +0000 (17:32 +0200)
commitc3881eb58d56116c79ac4ee4f40fd15ead124c4b
tree1cd15be069bf435ff0ed342a019cd23ff2b4b3de
parent2f62f36e62daec43aa7b9633ef7f18e042a80bed
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>
arch/x86/xen/smp_pv.c
arch/x86/xen/xen-head.S