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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 May 2022 07:14:31 +0000 (09:14 +0200)
commit05df3bdbc259fb673716f3df6e307d761637d1a2
tree2f3a98ea02392b8e1a905186d8ddadd963c4e2ae
parent0d3817cb4ebe57754fa4f4bda87c13e6a2e000d9
x86/xen: Make the secondary CPU idle tasks reliable

commit c3881eb58d56116c79ac4ee4f40fd15ead124c4b upstream.

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>
Signed-off-by: Markus Boehme <markubo@amazon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/xen/smp_pv.c
arch/x86/xen/xen-head.S