Commit 64cbd0ac authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Borislav Petkov
Browse files

x86/entry: Don't call error_entry() for XENPV



XENPV guests enter already on the task stack and they can't fault for
native_iret() nor native_load_gs_index() since they use their own pvop
for IRET and load_gs_index(). A CR3 switch is not needed either.

So there is no reason to call error_entry() in XENPV.

  [ bp: Massage commit message. ]

Signed-off-by: default avatarLai Jiangshan <jiangshan.ljs@antgroup.com>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Link: https://lore.kernel.org/r/20220503032107.680190-6-jiangshanlai@gmail.com
parent c64cc280
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -336,8 +336,17 @@ SYM_CODE_END(push_and_clear_regs)
	call push_and_clear_regs
	UNWIND_HINT_REGS

	call	error_entry
	movq	%rax, %rsp			/* switch to the task stack if from userspace */
	/*
	 * Call error_entry() and switch to the task stack if from userspace.
	 *
	 * When in XENPV, it is already in the task stack, and it can't fault
	 * for native_iret() nor native_load_gs_index() since XENPV uses its
	 * own pvops for IRET and load_gs_index().  And it doesn't need to
	 * switch the CR3.  So it can skip invoking error_entry().
	 */
	ALTERNATIVE "call error_entry; movq %rax, %rsp", \
		"", X86_FEATURE_XENPV

	ENCODE_FRAME_POINTER
	UNWIND_HINT_REGS