1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | /* |
3 | * Common place for both 32- and 64-bit entry routines. |
4 | */ |
5 | |
6 | #include <linux/export.h> |
7 | #include <linux/linkage.h> |
8 | #include <asm/msr-index.h> |
9 | #include <asm/unwind_hints.h> |
10 | #include <asm/segment.h> |
11 | #include <asm/cache.h> |
12 | |
13 | #include "calling.h" |
14 | |
15 | .pushsection .noinstr.text, "ax" |
16 | |
17 | SYM_FUNC_START(entry_ibpb) |
18 | movl $MSR_IA32_PRED_CMD, %ecx |
19 | movl $PRED_CMD_IBPB, %eax |
20 | xorl %edx, %edx |
21 | wrmsr |
22 | RET |
23 | SYM_FUNC_END(entry_ibpb) |
24 | /* For KVM */ |
25 | EXPORT_SYMBOL_GPL(entry_ibpb); |
26 | |
27 | .popsection |
28 | |
29 | /* |
30 | * Define the VERW operand that is disguised as entry code so that |
31 | * it can be referenced with KPTI enabled. This ensure VERW can be |
32 | * used late in exit-to-user path after page tables are switched. |
33 | */ |
34 | .pushsection .entry.text, "ax" |
35 | |
36 | .align L1_CACHE_BYTES, 0xcc |
37 | SYM_CODE_START_NOALIGN(mds_verw_sel) |
38 | UNWIND_HINT_UNDEFINED |
39 | ANNOTATE_NOENDBR |
40 | .word __KERNEL_DS |
41 | .align L1_CACHE_BYTES, 0xcc |
42 | SYM_CODE_END(mds_verw_sel); |
43 | /* For KVM */ |
44 | EXPORT_SYMBOL_GPL(mds_verw_sel); |
45 | |
46 | .popsection |
47 | |
48 | THUNK warn_thunk_thunk, __warn_thunk |
49 |