On Mon, Apr 01, 2024 at 04:22:00PM +0800, Chao Gao <chao.gao@xxxxxxxxx> wrote: > On Mon, Feb 26, 2024 at 12:26:44AM -0800, isaku.yamahata@xxxxxxxxx wrote: > >From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > > > >Because guest TD state is protected, exceptions in guest TDs can't be > >intercepted. TDX VMM doesn't need to handle exceptions. > >tdx_handle_exit_irqoff() handles NMI and machine check. Ignore NMI and > > tdx_handle_exit_irqoff() doesn't handle NMIs. Will it to tdx_handle_exception(). > >machine check and continue guest TD execution. > > > >For external interrupt, increment stats same to the VMX case. > > > >Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > >Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > >--- > > arch/x86/kvm/vmx/tdx.c | 23 +++++++++++++++++++++++ > > 1 file changed, 23 insertions(+) > > > >diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c > >index 0db80fa020d2..bdd74682b474 100644 > >--- a/arch/x86/kvm/vmx/tdx.c > >+++ b/arch/x86/kvm/vmx/tdx.c > >@@ -918,6 +918,25 @@ void tdx_handle_exit_irqoff(struct kvm_vcpu *vcpu) > > vmx_handle_exception_irqoff(vcpu, tdexit_intr_info(vcpu)); > > } > > > >+static int tdx_handle_exception(struct kvm_vcpu *vcpu) > >+{ > >+ u32 intr_info = tdexit_intr_info(vcpu); > >+ > >+ if (is_nmi(intr_info) || is_machine_check(intr_info)) > >+ return 1; > > Add a comment in code as well. Sure. > >+ > >+ kvm_pr_unimpl("unexpected exception 0x%x(exit_reason 0x%llx qual 0x%lx)\n", > >+ intr_info, > >+ to_tdx(vcpu)->exit_reason.full, tdexit_exit_qual(vcpu)); > >+ return -EFAULT; > > -EFAULT looks incorrect. As this is unexpected exception, we should exit to to the user-space with KVM_EXIT_EXCEPTION. Then QEMU will abort with message. -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>