mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/spec_ctrl: Hold SCF in %ebx across SPEC_CTRL_ENTRY_{PV,INTR}
... as we do in the exit paths too. This will allow simplification to the sub-blocks. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
22390697bf
commit
9607aeb660
3 files changed
+14
-10
No files matched your search
@@ -251,9 +251,11 @@
|
||||
*/
|
||||
.macro SPEC_CTRL_ENTRY_FROM_PV
|
||||
/*
|
||||
* Requires %rsp=regs/cpuinfo, %rdx=0
|
||||
* Clobbers %rax, %rcx, %rdx
|
||||
* Requires %rsp=regs/cpuinfo, %r14=stack_end, %rdx=0
|
||||
* Clobbers %rax, %rbx, %rcx, %rdx
|
||||
*/
|
||||
movzbl STACK_CPUINFO_FIELD(scf)(%r14), %ebx
|
||||
|
||||
ALTERNATIVE "", __stringify(DO_SPEC_CTRL_COND_IBPB maybexen=0), \
|
||||
X86_FEATURE_IBPB_ENTRY_PV
|
||||
|
||||
@@ -277,8 +279,10 @@
|
||||
.macro SPEC_CTRL_ENTRY_FROM_INTR
|
||||
/*
|
||||
* Requires %rsp=regs, %r14=stack_end, %rdx=0
|
||||
* Clobbers %rax, %rcx, %rdx
|
||||
* Clobbers %rax, %rbx, %rcx, %rdx
|
||||
*/
|
||||
movzbl STACK_CPUINFO_FIELD(scf)(%r14), %ebx
|
||||
|
||||
testb $3, UREGS_cs(%rsp)
|
||||
jz .L\@_skip
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ FUNC(entry_int82)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
sti
|
||||
|
||||
@@ -267,7 +267,7 @@ FUNC(lstar_enter)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
mov STACK_CPUINFO_FIELD(xen_cr3)(%r14), %rcx
|
||||
@@ -307,7 +307,7 @@ FUNC(cstar_enter)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
mov STACK_CPUINFO_FIELD(xen_cr3)(%r14), %rcx
|
||||
@@ -351,7 +351,7 @@ LABEL(sysenter_eflags_saved, 0)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
/* PUSHF above has saved EFLAGS.IF clear (the caller had it set). */
|
||||
@@ -407,7 +407,7 @@ FUNC(entry_int80)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_PV /* Req: %rsp=regs/cpuinfo, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
mov STACK_CPUINFO_FIELD(xen_cr3)(%r14), %rcx
|
||||
@@ -723,7 +723,7 @@ FUNC(common_interrupt)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_INTR /* Req: %rsp=regs, %r14=end, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_INTR /* Req: %rsp=regs, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
mov STACK_CPUINFO_FIELD(xen_cr3)(%r14), %rcx
|
||||
@@ -759,7 +759,7 @@ FUNC(handle_exception, 0)
|
||||
|
||||
GET_STACK_END(14)
|
||||
|
||||
SPEC_CTRL_ENTRY_FROM_INTR /* Req: %rsp=regs, %r14=end, %rdx=0, Clob: acd */
|
||||
SPEC_CTRL_ENTRY_FROM_INTR /* Req: %rsp=regs, %r14=end, %rdx=0, Clob: abcd */
|
||||
/* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */
|
||||
|
||||
mov STACK_CPUINFO_FIELD(xen_cr3)(%r14), %rcx
|
||||
|
||||