Skip to content

Commit 1001d98

Browse files
Sean Christophersonbonzini
authored andcommitted
KVM: TDX: Add TDX "architectural" error codes
Add error codes for the TDX SEAMCALLs both for TDX VMM side for TDH SEAMCALL and TDX guest side for TDG.VP.VMCALL. KVM issues the TDX SEAMCALLs and checks its error code. KVM handles hypercall from the TDX guest and may return an error. So error code for the TDX guest is also needed. TDX SEAMCALL uses bits 31:0 to return more information, so these error codes will only exactly match RAX[63:32]. Error codes for TDG.VP.VMCALL is defined by TDX Guest-Host-Communication interface spec. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Yuan Yao <yuan.yao@intel.com> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> Message-ID: <20241030190039.77971-14-rick.p.edgecombe@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent fcae3a3 commit 1001d98

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

arch/x86/include/asm/shared/tdx.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@
7171
#define TDVMCALL_GET_QUOTE 0x10002
7272
#define TDVMCALL_REPORT_FATAL_ERROR 0x10003
7373

74-
#define TDVMCALL_STATUS_RETRY 1
74+
/*
75+
* TDG.VP.VMCALL Status Codes (returned in R10)
76+
*/
77+
#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL
78+
#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL
79+
#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL
7580

7681
/*
7782
* Bitmasks of exposed registers (with VMM).

arch/x86/kvm/vmx/tdx.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#define __KVM_X86_VMX_TDX_H
44

55
#include "tdx_arch.h"
6+
#include "tdx_errno.h"
67

78
#ifdef CONFIG_KVM_INTEL_TDX
89
int tdx_bringup(void);

arch/x86/kvm/vmx/tdx_errno.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
/* architectural status code for SEAMCALL */
3+
4+
#ifndef __KVM_X86_TDX_ERRNO_H
5+
#define __KVM_X86_TDX_ERRNO_H
6+
7+
#define TDX_SEAMCALL_STATUS_MASK 0xFFFFFFFF00000000ULL
8+
9+
/*
10+
* TDX SEAMCALL Status Codes (returned in RAX)
11+
*/
12+
#define TDX_NON_RECOVERABLE_VCPU 0x4000000100000000ULL
13+
#define TDX_INTERRUPTED_RESUMABLE 0x8000000300000000ULL
14+
#define TDX_OPERAND_INVALID 0xC000010000000000ULL
15+
#define TDX_OPERAND_BUSY 0x8000020000000000ULL
16+
#define TDX_PREVIOUS_TLB_EPOCH_BUSY 0x8000020100000000ULL
17+
#define TDX_PAGE_METADATA_INCORRECT 0xC000030000000000ULL
18+
#define TDX_VCPU_NOT_ASSOCIATED 0x8000070200000000ULL
19+
#define TDX_KEY_GENERATION_FAILED 0x8000080000000000ULL
20+
#define TDX_KEY_STATE_INCORRECT 0xC000081100000000ULL
21+
#define TDX_KEY_CONFIGURED 0x0000081500000000ULL
22+
#define TDX_NO_HKID_READY_TO_WBCACHE 0x0000082100000000ULL
23+
#define TDX_FLUSHVP_NOT_DONE 0x8000082400000000ULL
24+
#define TDX_EPT_WALK_FAILED 0xC0000B0000000000ULL
25+
#define TDX_EPT_ENTRY_STATE_INCORRECT 0xC0000B0D00000000ULL
26+
27+
/*
28+
* TDX module operand ID, appears in 31:0 part of error code as
29+
* detail information
30+
*/
31+
#define TDX_OPERAND_ID_RCX 0x01
32+
#define TDX_OPERAND_ID_TDR 0x80
33+
#define TDX_OPERAND_ID_SEPT 0x92
34+
#define TDX_OPERAND_ID_TD_EPOCH 0xa9
35+
36+
#endif /* __KVM_X86_TDX_ERRNO_H */

0 commit comments

Comments
 (0)