Message ID | 0375033d320c599deee675c4232543c73233ce8b.1705965634.git.isaku.yamahata@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM TDX basic feature support | expand |
On Mon, Jan 22, 2024 at 03:52:52PM -0800, isaku.yamahata@intel.com wrote: > From: Isaku Yamahata <isaku.yamahata@intel.com> > > Add helper functions to print out errors from the TDX module in a uniform > manner. > > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> > Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com> > --- > v18: > - Added Reviewed-by Binbin. > --- > arch/x86/kvm/Makefile | 2 +- > arch/x86/kvm/vmx/tdx_error.c | 21 +++++++++++++++++++++ > arch/x86/kvm/vmx/tdx_ops.h | 5 +++++ > 3 files changed, 27 insertions(+), 1 deletion(-) > create mode 100644 arch/x86/kvm/vmx/tdx_error.c > > diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile > index 5b85ef84b2e9..44b0594da877 100644 > --- a/arch/x86/kvm/Makefile > +++ b/arch/x86/kvm/Makefile > @@ -24,7 +24,7 @@ kvm-intel-y += vmx/vmx.o vmx/vmenter.o vmx/pmu_intel.o vmx/vmcs12.o \ > > kvm-intel-$(CONFIG_X86_SGX_KVM) += vmx/sgx.o > kvm-intel-$(CONFIG_KVM_HYPERV) += vmx/hyperv.o vmx/hyperv_evmcs.o > -kvm-intel-$(CONFIG_INTEL_TDX_HOST) += vmx/tdx.o > +kvm-intel-$(CONFIG_INTEL_TDX_HOST) += vmx/tdx.o vmx/tdx_error.o > > kvm-amd-y += svm/svm.o svm/vmenter.o svm/pmu.o svm/nested.o svm/avic.o \ > svm/sev.o > diff --git a/arch/x86/kvm/vmx/tdx_error.c b/arch/x86/kvm/vmx/tdx_error.c > new file mode 100644 > index 000000000000..42fcabe1f6c7 > --- /dev/null > +++ b/arch/x86/kvm/vmx/tdx_error.c > @@ -0,0 +1,21 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* functions to record TDX SEAMCALL error */ > + > +#include <linux/kernel.h> > +#include <linux/bug.h> > + > +#include "tdx_ops.h" > + > +void pr_tdx_error(u64 op, u64 error_code, const struct tdx_module_args *out) > +{ > + if (!out) { > + pr_err_ratelimited("SEAMCALL (0x%016llx) failed: 0x%016llx\n", > + op, error_code); > + return; > + } > + > +#define MSG \ > + "SEAMCALL (0x%016llx) failed: 0x%016llx RCX 0x%016llx RDX 0x%016llx R8 0x%016llx R9 0x%016llx R10 0x%016llx R11 0x%016llx\n" > + pr_err_ratelimited(MSG, op, error_code, out->rcx, out->rdx, out->r8, > + out->r9, out->r10, out->r11); > +} > diff --git a/arch/x86/kvm/vmx/tdx_ops.h b/arch/x86/kvm/vmx/tdx_ops.h > index f4c16e5265f0..cd12e9c2a421 100644 > --- a/arch/x86/kvm/vmx/tdx_ops.h > +++ b/arch/x86/kvm/vmx/tdx_ops.h > @@ -10,6 +10,7 @@ > #include <asm/cacheflush.h> > #include <asm/asm.h> > #include <asm/kvm_host.h> > +#include <asm/tdx.h> Just not sure the reason of this #include here, compile fine w/o it. Reviewed-by: Yuan Yao <yuan.yao@intel.com> > > #include "tdx_errno.h" > #include "tdx_arch.h" > @@ -47,6 +48,10 @@ static inline u64 tdx_seamcall(u64 op, struct tdx_module_args *in, > return ret; > } > > +#ifdef CONFIG_INTEL_TDX_HOST > +void pr_tdx_error(u64 op, u64 error_code, const struct tdx_module_args *out); > +#endif > + > static inline u64 tdh_mng_addcx(hpa_t tdr, hpa_t addr) > { > struct tdx_module_args in = { > -- > 2.25.1 > >
diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 5b85ef84b2e9..44b0594da877 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -24,7 +24,7 @@ kvm-intel-y += vmx/vmx.o vmx/vmenter.o vmx/pmu_intel.o vmx/vmcs12.o \ kvm-intel-$(CONFIG_X86_SGX_KVM) += vmx/sgx.o kvm-intel-$(CONFIG_KVM_HYPERV) += vmx/hyperv.o vmx/hyperv_evmcs.o -kvm-intel-$(CONFIG_INTEL_TDX_HOST) += vmx/tdx.o +kvm-intel-$(CONFIG_INTEL_TDX_HOST) += vmx/tdx.o vmx/tdx_error.o kvm-amd-y += svm/svm.o svm/vmenter.o svm/pmu.o svm/nested.o svm/avic.o \ svm/sev.o diff --git a/arch/x86/kvm/vmx/tdx_error.c b/arch/x86/kvm/vmx/tdx_error.c new file mode 100644 index 000000000000..42fcabe1f6c7 --- /dev/null +++ b/arch/x86/kvm/vmx/tdx_error.c @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 +/* functions to record TDX SEAMCALL error */ + +#include <linux/kernel.h> +#include <linux/bug.h> + +#include "tdx_ops.h" + +void pr_tdx_error(u64 op, u64 error_code, const struct tdx_module_args *out) +{ + if (!out) { + pr_err_ratelimited("SEAMCALL (0x%016llx) failed: 0x%016llx\n", + op, error_code); + return; + } + +#define MSG \ + "SEAMCALL (0x%016llx) failed: 0x%016llx RCX 0x%016llx RDX 0x%016llx R8 0x%016llx R9 0x%016llx R10 0x%016llx R11 0x%016llx\n" + pr_err_ratelimited(MSG, op, error_code, out->rcx, out->rdx, out->r8, + out->r9, out->r10, out->r11); +} diff --git a/arch/x86/kvm/vmx/tdx_ops.h b/arch/x86/kvm/vmx/tdx_ops.h index f4c16e5265f0..cd12e9c2a421 100644 --- a/arch/x86/kvm/vmx/tdx_ops.h +++ b/arch/x86/kvm/vmx/tdx_ops.h @@ -10,6 +10,7 @@ #include <asm/cacheflush.h> #include <asm/asm.h> #include <asm/kvm_host.h> +#include <asm/tdx.h> #include "tdx_errno.h" #include "tdx_arch.h" @@ -47,6 +48,10 @@ static inline u64 tdx_seamcall(u64 op, struct tdx_module_args *in, return ret; } +#ifdef CONFIG_INTEL_TDX_HOST +void pr_tdx_error(u64 op, u64 error_code, const struct tdx_module_args *out); +#endif + static inline u64 tdh_mng_addcx(hpa_t tdr, hpa_t addr) { struct tdx_module_args in = {