Messages in this thread | | | Date | Wed, 23 Nov 2022 22:47:54 +0800 | Subject | Re: [PATCH v10 100/108] KVM: TDX: Handle TDX PV report fatal error hypercall | From | Binbin Wu <> |
| |
On 10/30/2022 2:23 PM, isaku.yamahata@intel.com wrote: > From: Isaku Yamahata <isaku.yamahata@intel.com> > > Wire up TDX PV report fatal error hypercall to KVM_SYSTEM_EVENT_CRASH KVM > exit event. > > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> > --- > arch/x86/kvm/vmx/tdx.c | 20 ++++++++++++++++++++ > include/uapi/linux/kvm.h | 1 + > 2 files changed, 21 insertions(+) > > diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c > index e3062c245e70..16f168f4f21a 100644 > --- a/arch/x86/kvm/vmx/tdx.c > +++ b/arch/x86/kvm/vmx/tdx.c > @@ -1068,6 +1068,24 @@ static int tdx_emulate_wrmsr(struct kvm_vcpu *vcpu) > return 1; > } > > +static int tdx_report_fatal_error(struct kvm_vcpu *vcpu) > +{ > + /* > + * Exit to userspace device model for teardown. > + * Because guest TD is already panicing
panicking
> , returning an error to guerst
typo, guest
> TD > + * doesn't make sense. No argument check is done. > + */ > + > + vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT; > + vcpu->run->system_event.type = KVM_SYSTEM_EVENT_TDX; > + vcpu->run->system_event.ndata = 3; > + vcpu->run->system_event.data[0] = TDG_VP_VMCALL_REPORT_FATAL_ERROR; > + vcpu->run->system_event.data[1] = tdvmcall_a0_read(vcpu); > + vcpu->run->system_event.data[2] = tdvmcall_a1_read(vcpu); > + > + return 0; > +} > + > static int handle_tdvmcall(struct kvm_vcpu *vcpu) > { > if (tdvmcall_exit_type(vcpu)) > @@ -1086,6 +1104,8 @@ static int handle_tdvmcall(struct kvm_vcpu *vcpu) > return tdx_emulate_rdmsr(vcpu); > case EXIT_REASON_MSR_WRITE: > return tdx_emulate_wrmsr(vcpu); > + case TDG_VP_VMCALL_REPORT_FATAL_ERROR: > + return tdx_report_fatal_error(vcpu); > default: > break; > } > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 49386e4de8b8..504a8f73284b 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -478,6 +478,7 @@ struct kvm_run { > #define KVM_SYSTEM_EVENT_WAKEUP 4 > #define KVM_SYSTEM_EVENT_SUSPEND 5 > #define KVM_SYSTEM_EVENT_SEV_TERM 6 > +#define KVM_SYSTEM_EVENT_TDX 7 > __u32 type; > __u32 ndata; > union {
| |