return vmx_set_identity_map_addr(kvm, ident_addr);
 }
 
+#ifdef CONFIG_X86_64
+static int vt_set_hv_timer(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc,
+                             bool *expired)
+{
+       /* VMX-preemption timer isn't available for TDX. */
+       if (is_td_vcpu(vcpu))
+               return -EINVAL;
+
+       return vmx_set_hv_timer(vcpu, guest_deadline_tsc, expired);
+}
+
+static void vt_cancel_hv_timer(struct kvm_vcpu *vcpu)
+{
+       /* VMX-preemption timer can't be set.  See vt_set_hv_timer(). */
+       if (is_td_vcpu(vcpu))
+               return;
+
+       vmx_cancel_hv_timer(vcpu);
+}
+#endif
+
 static int vt_mem_enc_ioctl(struct kvm *kvm, void __user *argp)
 {
        if (!is_td(kvm))
        .pi_start_assignment = vmx_pi_start_assignment,
 
 #ifdef CONFIG_X86_64
-       .set_hv_timer = vmx_set_hv_timer,
-       .cancel_hv_timer = vmx_cancel_hv_timer,
+       .set_hv_timer = vt_set_hv_timer,
+       .cancel_hv_timer = vt_cancel_hv_timer,
 #endif
 
        .setup_mce = vmx_setup_mce,