Skip to content

Commit

Permalink
KVM: TDX: retry TDH.VP.ENTER on TDX_OPERATION_BUSY
Browse files Browse the repository at this point in the history
TDH.VP.ENTER may return TDX_OPERATION_BUSY to KVM (e.g. some internal lock
is busy), which expects KVM to retry TDH.VP.ENTER. Change KVM to retry on
TDX_OPERATION_BUSY for a limited number of times.

Signed-off-by: Wei Wang <wei.w.wang@intel.com>
  • Loading branch information
wei-w-wang committed Mar 8, 2023
1 parent 18998e6 commit 16e2ccd
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions arch/x86/kvm/vmx/tdx.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,9 +904,21 @@ u64 __tdx_vcpu_run(hpa_t tdvpr, void *regs, u32 regs_mask);
static noinstr void tdx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
struct vcpu_tdx *tdx)
{
u64 err, retries = 0;

guest_enter_irqoff();
tdx->exit_reason.full = __tdx_vcpu_run(tdx->tdvpr_pa, vcpu->arch.regs,
tdx->tdvmcall.regs_mask);
do {
tdx->exit_reason.full = __tdx_vcpu_run(tdx->tdvpr_pa,
vcpu->arch.regs,
tdx->tdvmcall.regs_mask);
err = tdx->exit_reason.full & TDX_SEAMCALL_STATUS_MASK;

if (retries++ > TDX_SEAMCALL_RETRY_MAX) {
KVM_BUG_ON(err, vcpu->kvm);
pr_tdx_error(TDH_VP_ENTER, err, NULL);
break;
}
} while (err == TDX_OPERAND_BUSY);
guest_exit_irqoff();
}

Expand Down

0 comments on commit 16e2ccd

Please sign in to comment.