On Thu, Mar 28, 2024 at 11:12:57AM +0800, Chao Gao <chao.gao@xxxxxxxxx> wrote: > >+#if IS_ENABLED(CONFIG_HYPERV) > >+static int vt_flush_remote_tlbs(struct kvm *kvm); > >+#endif > >+ > > static __init int vt_hardware_setup(void) > > { > > int ret; > >@@ -49,11 +53,29 @@ static __init int vt_hardware_setup(void) > > pr_warn_ratelimited("TDX requires mmio caching. Please enable mmio caching for TDX.\n"); > > } > > > >+#if IS_ENABLED(CONFIG_HYPERV) > >+ /* > >+ * TDX KVM overrides flush_remote_tlbs method and assumes > >+ * flush_remote_tlbs_range = NULL that falls back to > >+ * flush_remote_tlbs. Disable TDX if there are conflicts. > >+ */ > >+ if (vt_x86_ops.flush_remote_tlbs || > >+ vt_x86_ops.flush_remote_tlbs_range) { > >+ enable_tdx = false; > >+ pr_warn_ratelimited("TDX requires baremetal. Not Supported on VMM guest.\n"); > >+ } > >+#endif > >+ > > enable_tdx = enable_tdx && !tdx_hardware_setup(&vt_x86_ops); > > if (enable_tdx) > > vt_x86_ops.vm_size = max_t(unsigned int, vt_x86_ops.vm_size, > > sizeof(struct kvm_tdx)); > > > >+#if IS_ENABLED(CONFIG_HYPERV) > >+ if (enable_tdx) > >+ vt_x86_ops.flush_remote_tlbs = vt_flush_remote_tlbs; > > Is this hook necessary/beneficial to TDX? > > if no, we can leave .flush_remote_tlbs as NULL. if yes, we should do: > > struct kvm_x86_ops { > ... > #if IS_ENABLED(CONFIG_HYPERV) || IS_ENABLED(TDX...) > int (*flush_remote_tlbs)(struct kvm *kvm); > int (*flush_remote_tlbs_range)(struct kvm *kvm, gfn_t gfn, > gfn_t nr_pages); > #endif Will fix it. I made mistake when I rebased it. Now those hooks are only for CONFIG_HPYERV. -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>