> static inline bool is_td_vcpu_created(struct vcpu_tdx *tdx) > { > return tdx->td_vcpu_created; >@@ -897,6 +932,11 @@ fastpath_t tdx_vcpu_run(struct kvm_vcpu *vcpu) > > tdx_complete_interrupts(vcpu); > >+ if (tdx->exit_reason.basic == EXIT_REASON_TDCALL) >+ tdx->tdvmcall.rcx = vcpu->arch.regs[VCPU_REGS_RCX]; kvm_rcx_read()? >+ else >+ tdx->tdvmcall.rcx = 0; RCX on TDVMCALL exit is supposed to be consumed by TDX module. I don't get why caching it is necessary. Can tdx->tdvmcall be simply dropped?