On Mon, Jun 27, 2022, isaku.yamahata@xxxxxxxxx wrote: > +int tdx_vcpu_create(struct kvm_vcpu *vcpu) > +{ > + struct vcpu_tdx *tdx = to_tdx(vcpu); > + int ret, i; > + > + /* TDX only supports x2APIC, which requires an in-kernel local APIC. */ > + if (!vcpu->arch.apic) > + return -EINVAL; > + > + fpstate_set_confidential(&vcpu->arch.guest_fpu); > + > + ret = tdx_alloc_td_page(&tdx->tdvpr); > + if (ret) > + return ret; > + > + tdx->tdvpx = kcalloc(tdx_caps.tdvpx_nr_pages, sizeof(*tdx->tdvpx), > + GFP_KERNEL_ACCOUNT); > + if (!tdx->tdvpx) { > + ret = -ENOMEM; > + goto free_tdvpr; > + } > + for (i = 0; i < tdx_caps.tdvpx_nr_pages; i++) { > + ret = tdx_alloc_td_page(&tdx->tdvpx[i]); > + if (ret) > + goto free_tdvpx; > + } Similar to HKID allocation for intrahost migration, can the TDVPX allocations be moved to KVM_TDX_INIT_VCPU?