> +static void vt_flush_tlb_all(struct kvm_vcpu *vcpu) > +{ > + /* > + * TDX calls tdx_track() in tdx_sept_remove_private_spte() to ensure > + * private EPT will be flushed on the next TD enter. > + * No need to call tdx_track() here again even when this callback is as > + * a result of zapping private EPT. > + * Just invoke invept() directly here to work for both shared EPT and > + * private EPT. IIUC, private EPT is already flushed in .remove_private_spte(), so in theory we don't have to invept() for private EPT? Thanks, Yilun > + */ > + if (is_td_vcpu(vcpu)) { > + ept_sync_global(); > + return; > + } > + > + vmx_flush_tlb_all(vcpu); > +}