Skip to content

Commit 7cfacd1

Browse files
committed
Merge: x86/vmware: Add TDX hypercall support
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/5138 JIRA: https://issues.redhat.com/browse/RHEL-52683 Omitted-fix: b9f174c ("x86/unwind/orc: Add ELF section with ORC version identifier") see https://issues.redhat.com/browse/RHEL-27234 for discussion Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Approved-by: Mika Penttilä <mpenttil@redhat.com> Approved-by: Tony Camuso <tcamuso@redhat.com> Approved-by: Josh Poimboeuf <jpoimboe@redhat.com> Approved-by: David Arcari <darcari@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: Rado Vrbovsky <rvrbovsk@redhat.com>
2 parents 8d2777d + 65432dd commit 7cfacd1

File tree

29 files changed

+806
-624
lines changed

29 files changed

+806
-624
lines changed

Documentation/livepatch/reliable-stacktrace.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ trampoline or return trampoline. For example, considering the x86_64
183183
.. code-block:: none
184184
185185
SYM_CODE_START(return_to_handler)
186-
UNWIND_HINT_EMPTY
186+
UNWIND_HINT_UNDEFINED
187187
subq $24, %rsp
188188
189189
/* Save the return values */

arch/x86/entry/entry.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ EXPORT_SYMBOL_GPL(entry_ibpb);
3333

3434
.align L1_CACHE_BYTES, 0xcc
3535
SYM_CODE_START_NOALIGN(mds_verw_sel)
36-
UNWIND_HINT_EMPTY
36+
UNWIND_HINT_UNDEFINED
3737
ANNOTATE_NOENDBR
3838
.word __KERNEL_DS
3939
.align L1_CACHE_BYTES, 0xcc

arch/x86/entry/entry_64.S

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ syscall_return_via_sysret:
144144
*/
145145
movq %rsp, %rdi
146146
movq PER_CPU_VAR(cpu_tss_rw + TSS_sp0), %rsp
147-
UNWIND_HINT_EMPTY
147+
UNWIND_HINT_END_OF_STACK
148148

149149
pushq RSP-RDI(%rdi) /* RSP */
150150
pushq (%rdi) /* RDI */
@@ -226,7 +226,7 @@ SYM_FUNC_END(__switch_to_asm)
226226
.pushsection .text, "ax"
227227
__FUNC_ALIGN
228228
SYM_CODE_START_NOALIGN(ret_from_fork)
229-
UNWIND_HINT_EMPTY
229+
UNWIND_HINT_END_OF_STACK
230230
ANNOTATE_NOENDBR // copy_thread
231231
CALL_DEPTH_ACCOUNT
232232
movq %rax, %rdi
@@ -243,7 +243,7 @@ SYM_CODE_START_NOALIGN(ret_from_fork)
243243

244244
1:
245245
/* kernel thread */
246-
UNWIND_HINT_EMPTY
246+
UNWIND_HINT_END_OF_STACK
247247
movq %r12, %rdi
248248
CALL_NOSPEC rbx
249249
/*
@@ -594,7 +594,7 @@ SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL)
594594
*/
595595
movq %rsp, %rdi
596596
movq PER_CPU_VAR(cpu_tss_rw + TSS_sp0), %rsp
597-
UNWIND_HINT_EMPTY
597+
UNWIND_HINT_END_OF_STACK
598598

599599
/* Copy the IRET frame to the trampoline stack. */
600600
pushq 6*8(%rdi) /* SS */
@@ -823,7 +823,7 @@ SYM_CODE_END(exc_xen_hypervisor_callback)
823823
*/
824824
__FUNC_ALIGN
825825
SYM_CODE_START_NOALIGN(xen_failsafe_callback)
826-
UNWIND_HINT_EMPTY
826+
UNWIND_HINT_UNDEFINED
827827
ENDBR
828828
movl %ds, %ecx
829829
cmpw %cx, 0x10(%rsp)
@@ -1477,7 +1477,7 @@ SYM_CODE_END(asm_exc_nmi)
14771477
* MSRs to fully disable 32-bit SYSCALL.
14781478
*/
14791479
SYM_CODE_START(entry_SYSCALL32_ignore)
1480-
UNWIND_HINT_EMPTY
1480+
UNWIND_HINT_END_OF_STACK
14811481
ENDBR
14821482
mov $-ENOSYS, %eax
14831483
CLEAR_CPU_BUFFERS

arch/x86/include/asm/orc_types.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@
3939
#define ORC_REG_SP_INDIRECT 9
4040
#define ORC_REG_MAX 15
4141

42-
#define ORC_TYPE_CALL 0
43-
#define ORC_TYPE_REGS 1
44-
#define ORC_TYPE_REGS_PARTIAL 2
42+
#define ORC_TYPE_UNDEFINED 0
43+
#define ORC_TYPE_END_OF_STACK 1
44+
#define ORC_TYPE_CALL 2
45+
#define ORC_TYPE_REGS 3
46+
#define ORC_TYPE_REGS_PARTIAL 4
4547

4648
#ifndef __ASSEMBLY__
4749
#include <asm/byteorder.h>
@@ -60,16 +62,14 @@ struct orc_entry {
6062
#if defined(__LITTLE_ENDIAN_BITFIELD)
6163
unsigned sp_reg:4;
6264
unsigned bp_reg:4;
63-
unsigned type:2;
65+
unsigned type:3;
6466
unsigned signal:1;
65-
unsigned end:1;
6667
#elif defined(__BIG_ENDIAN_BITFIELD)
6768
unsigned bp_reg:4;
6869
unsigned sp_reg:4;
6970
unsigned unused:4;
70-
unsigned end:1;
7171
unsigned signal:1;
72-
unsigned type:2;
72+
unsigned type:3;
7373
#endif
7474
} __packed;
7575

arch/x86/include/asm/unwind_hints.h

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@
77

88
#ifdef __ASSEMBLY__
99

10-
.macro UNWIND_HINT_EMPTY
11-
UNWIND_HINT type=UNWIND_HINT_TYPE_CALL end=1
10+
.macro UNWIND_HINT_END_OF_STACK
11+
UNWIND_HINT type=UNWIND_HINT_TYPE_END_OF_STACK
12+
.endm
13+
14+
.macro UNWIND_HINT_UNDEFINED
15+
UNWIND_HINT type=UNWIND_HINT_TYPE_UNDEFINED
1216
.endm
1317

1418
.macro UNWIND_HINT_ENTRY
1519
VALIDATE_UNRET_BEGIN
16-
UNWIND_HINT_EMPTY
20+
UNWIND_HINT_END_OF_STACK
1721
.endm
1822

1923
.macro UNWIND_HINT_REGS base=%rsp offset=0 indirect=0 extra=1 partial=0 signal=1
@@ -72,8 +76,17 @@
7276

7377
#else
7478

79+
#define UNWIND_HINT_UNDEFINED \
80+
UNWIND_HINT(UNWIND_HINT_TYPE_UNDEFINED, 0, 0, 0)
81+
7582
#define UNWIND_HINT_FUNC \
76-
UNWIND_HINT(UNWIND_HINT_TYPE_FUNC, ORC_REG_SP, 8, 0, 0)
83+
UNWIND_HINT(UNWIND_HINT_TYPE_FUNC, ORC_REG_SP, 8, 0)
84+
85+
#define UNWIND_HINT_SAVE \
86+
UNWIND_HINT(UNWIND_HINT_TYPE_SAVE, 0, 0, 0)
87+
88+
#define UNWIND_HINT_RESTORE \
89+
UNWIND_HINT(UNWIND_HINT_TYPE_RESTORE, 0, 0, 0)
7790

7891
#endif /* __ASSEMBLY__ */
7992

0 commit comments

Comments
 (0)