Message ID | 20240812224820.34826-4-rick.p.edgecombe@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | TDX vCPU/VM creation | expand |
On 8/13/2024 6:47 AM, Rick Edgecombe wrote: > From: Sean Christopherson <sean.j.christopherson@intel.com> > > 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> > --- > v19: > - Drop TDX_EPT_WALK_FAILED, TDX_EPT_ENTRY_NOT_FREE > - Rename TDG_VP_VMCALL_ => TDVMCALL_ to match the existing code > - Move TDVMCALL error codes to shared/tdx.h > - Added TDX_OPERAND_ID_TDR > - Fix bisectability issues in headers (Kai) > --- > arch/x86/include/asm/shared/tdx.h | 6 ++++++ > arch/x86/kvm/vmx/tdx.h | 1 + > arch/x86/kvm/vmx/tdx_errno.h | 36 +++++++++++++++++++++++++++++++ > 3 files changed, 43 insertions(+) > create mode 100644 arch/x86/kvm/vmx/tdx_errno.h > > diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h > index fdfd41511b02..6ebbf8ee80b3 100644 > --- a/arch/x86/include/asm/shared/tdx.h > +++ b/arch/x86/include/asm/shared/tdx.h > @@ -28,6 +28,12 @@ > > #define TDVMCALL_STATUS_RETRY 1 > > +/* > + * TDG.VP.VMCALL Status Codes (returned in R10) > + */ > +#define TDVMCALL_SUCCESS 0x0000000000000000ULL > +#define TDVMCALL_INVALID_OPERAND 0x8000000000000000ULL > + TDX guest code has already defined/uses "TDVMCALL_STATUS_RETRY", which is one of the TDG.VP.VMCALL Status Codes. IMHO, the style of the macros should be unified. How about using TDVMALL_STATUS_* for TDG.VP.VMCALL Status Codes? +/* + * TDG.VP.VMCALL Status Codes (returned in R10) + */ +#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL -#define TDVMCALL_STATUS_RETRY 1 +#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL +#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL [...]
On Tue, Aug 13, 2024 at 02:08:40PM +0800, Binbin Wu wrote: > On 8/13/2024 6:47 AM, Rick Edgecombe wrote: > > From: Sean Christopherson <sean.j.christopherson@intel.com> > > --- a/arch/x86/include/asm/shared/tdx.h > > +++ b/arch/x86/include/asm/shared/tdx.h > > @@ -28,6 +28,12 @@ > > #define TDVMCALL_STATUS_RETRY 1 > > +/* > > + * TDG.VP.VMCALL Status Codes (returned in R10) > > + */ > > +#define TDVMCALL_SUCCESS 0x0000000000000000ULL > > +#define TDVMCALL_INVALID_OPERAND 0x8000000000000000ULL > > + > TDX guest code has already defined/uses "TDVMCALL_STATUS_RETRY", which is > one > of the TDG.VP.VMCALL Status Codes. > > IMHO, the style of the macros should be unified. > How about using TDVMALL_STATUS_* for TDG.VP.VMCALL Status Codes? > > +/* > + * TDG.VP.VMCALL Status Codes (returned in R10) > + */ > +#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL > -#define TDVMCALL_STATUS_RETRY 1 > +#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL > +#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL Makes sense as they are the hardware status codes. Regards, Tony
On Thu, Aug 29, 2024 at 08:24:25AM +0300, Tony Lindgren wrote: > On Tue, Aug 13, 2024 at 02:08:40PM +0800, Binbin Wu wrote: > > On 8/13/2024 6:47 AM, Rick Edgecombe wrote: > > > From: Sean Christopherson <sean.j.christopherson@intel.com> > > > --- a/arch/x86/include/asm/shared/tdx.h > > > +++ b/arch/x86/include/asm/shared/tdx.h > > > @@ -28,6 +28,12 @@ > > > #define TDVMCALL_STATUS_RETRY 1 > > > +/* > > > + * TDG.VP.VMCALL Status Codes (returned in R10) > > > + */ > > > +#define TDVMCALL_SUCCESS 0x0000000000000000ULL > > > +#define TDVMCALL_INVALID_OPERAND 0x8000000000000000ULL > > > + > > TDX guest code has already defined/uses "TDVMCALL_STATUS_RETRY", which is > > one > > of the TDG.VP.VMCALL Status Codes. > > > > IMHO, the style of the macros should be unified. > > How about using TDVMALL_STATUS_* for TDG.VP.VMCALL Status Codes? > > > > +/* > > + * TDG.VP.VMCALL Status Codes (returned in R10) > > + */ > > +#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL > > -#define TDVMCALL_STATUS_RETRY 1 > > +#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL > > +#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL > > Makes sense as they are the hardware status codes. I'll do a patch against the CoCo queue for the TDVMCALL_STATUS prefix FYI. Regards, Tony
On 8/30/24 07:52, Tony Lindgren wrote: >>> +#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL >>> -#define TDVMCALL_STATUS_RETRY 1 >>> +#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL >>> +#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL >> Makes sense as they are the hardware status codes. > I'll do a patch against the CoCo queue for the TDVMCALL_STATUS prefix FYI. Just squash it in the next version of this series. Paolo
On Tue, Sep 10, 2024 at 06:22:52PM +0200, Paolo Bonzini wrote: > On 8/30/24 07:52, Tony Lindgren wrote: > > > > +#define TDVMCALL_STATUS_SUCCESS 0x0000000000000000ULL > > > > -#define TDVMCALL_STATUS_RETRY 1 > > > > +#define TDVMCALL_STATUS_RETRY 0x0000000000000001ULL > > > > +#define TDVMCALL_STATUS_INVALID_OPERAND 0x8000000000000000ULL > > > Makes sense as they are the hardware status codes. > > I'll do a patch against the CoCo queue for the TDVMCALL_STATUS prefix FYI. > > Just squash it in the next version of this series. Sure no problem. Regards, Tony
diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h index fdfd41511b02..6ebbf8ee80b3 100644 --- a/arch/x86/include/asm/shared/tdx.h +++ b/arch/x86/include/asm/shared/tdx.h @@ -28,6 +28,12 @@ #define TDVMCALL_STATUS_RETRY 1 +/* + * TDG.VP.VMCALL Status Codes (returned in R10) + */ +#define TDVMCALL_SUCCESS 0x0000000000000000ULL +#define TDVMCALL_INVALID_OPERAND 0x8000000000000000ULL + /* * Bitmasks of exposed registers (with VMM). */ diff --git a/arch/x86/kvm/vmx/tdx.h b/arch/x86/kvm/vmx/tdx.h index 1d6fa81a072d..faed454385ca 100644 --- a/arch/x86/kvm/vmx/tdx.h +++ b/arch/x86/kvm/vmx/tdx.h @@ -2,6 +2,7 @@ #define __KVM_X86_VMX_TDX_H #include "tdx_arch.h" +#include "tdx_errno.h" #ifdef CONFIG_INTEL_TDX_HOST void tdx_bringup(void); diff --git a/arch/x86/kvm/vmx/tdx_errno.h b/arch/x86/kvm/vmx/tdx_errno.h new file mode 100644 index 000000000000..dc3fa2a58c2c --- /dev/null +++ b/arch/x86/kvm/vmx/tdx_errno.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* architectural status code for SEAMCALL */ + +#ifndef __KVM_X86_TDX_ERRNO_H +#define __KVM_X86_TDX_ERRNO_H + +#define TDX_SEAMCALL_STATUS_MASK 0xFFFFFFFF00000000ULL + +/* + * TDX SEAMCALL Status Codes (returned in RAX) + */ +#define TDX_NON_RECOVERABLE_VCPU 0x4000000100000000ULL +#define TDX_INTERRUPTED_RESUMABLE 0x8000000300000000ULL +#define TDX_OPERAND_INVALID 0xC000010000000000ULL +#define TDX_OPERAND_BUSY 0x8000020000000000ULL +#define TDX_PREVIOUS_TLB_EPOCH_BUSY 0x8000020100000000ULL +#define TDX_PAGE_METADATA_INCORRECT 0xC000030000000000ULL +#define TDX_VCPU_NOT_ASSOCIATED 0x8000070200000000ULL +#define TDX_KEY_GENERATION_FAILED 0x8000080000000000ULL +#define TDX_KEY_STATE_INCORRECT 0xC000081100000000ULL +#define TDX_KEY_CONFIGURED 0x0000081500000000ULL +#define TDX_NO_HKID_READY_TO_WBCACHE 0x0000082100000000ULL +#define TDX_FLUSHVP_NOT_DONE 0x8000082400000000ULL +#define TDX_EPT_WALK_FAILED 0xC0000B0000000000ULL +#define TDX_EPT_ENTRY_STATE_INCORRECT 0xC0000B0D00000000ULL + +/* + * TDX module operand ID, appears in 31:0 part of error code as + * detail information + */ +#define TDX_OPERAND_ID_RCX 0x01 +#define TDX_OPERAND_ID_TDR 0x80 +#define TDX_OPERAND_ID_SEPT 0x92 +#define TDX_OPERAND_ID_TD_EPOCH 0xa9 + +#endif /* __KVM_X86_TDX_ERRNO_H */