On Mon, Mar 18, 2024 at 09:01:05PM +0000, "Edgecombe, Rick P" <rick.p.edgecombe@xxxxxxxxx> wrote: > On Mon, 2024-02-26 at 00:26 -0800, isaku.yamahata@xxxxxxxxx wrote: > > +fastpath_t tdx_vcpu_run(struct kvm_vcpu *vcpu) > > +{ > > + struct vcpu_tdx *tdx = to_tdx(vcpu); > > + > > + if (unlikely(!tdx->initialized)) > > + return -EINVAL; > > + if (unlikely(vcpu->kvm->vm_bugged)) { > > + tdx->exit_reason.full = TDX_NON_RECOVERABLE_VCPU; > > + return EXIT_FASTPATH_NONE; > > + } > > + > > Isaku, can you elaborate on why this needs special handling? There is a > check in vcpu_enter_guest() like: > if (kvm_check_request(KVM_REQ_VM_DEAD, vcpu)) { > r = -EIO; > goto out; > } > > Instead it returns a SEAM error code for something actuated by KVM. But > can it even be reached because of the other check? Not sure if there is > a problem, just sticks out to me and wondering whats going on. The original intention is to get out the inner loop. As Sean pointed it out, the current code does poor job to check error of __seamcall_saved_ret(TDH_VP_ENTER). So it fails to call KVM_BUG_ON() when it returns unexcepted error. The right fix is to properly check an error from TDH_VP_ENTER and call KVM_BUG_ON(). Then the check you pointed out should go away. for // out loop if (kvm_check_request(KVM_REQ_VM_DEAD, vcpu)) { for // inner loop vcpu_run() kvm_vcpu_exit_request(vcpu). -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>