select MMU_NOTIFIER
        bool
 
+config KVM_ELIDE_TLB_FLUSH_IF_YOUNG
+       depends on KVM_GENERIC_MMU_NOTIFIER
+       bool
+
 config KVM_GENERIC_MEMORY_ATTRIBUTES
        depends on KVM_GENERIC_MMU_NOTIFIER
        bool
 
 static __always_inline int kvm_handle_hva_range(struct mmu_notifier *mn,
                                                unsigned long start,
                                                unsigned long end,
-                                               gfn_handler_t handler)
+                                               gfn_handler_t handler,
+                                               bool flush_on_ret)
 {
        struct kvm *kvm = mmu_notifier_to_kvm(mn);
        const struct kvm_mmu_notifier_range range = {
                .end            = end,
                .handler        = handler,
                .on_lock        = (void *)kvm_null_fn,
-               .flush_on_ret   = true,
+               .flush_on_ret   = flush_on_ret,
                .may_block      = false,
        };
 
                                                         unsigned long end,
                                                         gfn_handler_t handler)
 {
-       struct kvm *kvm = mmu_notifier_to_kvm(mn);
-       const struct kvm_mmu_notifier_range range = {
-               .start          = start,
-               .end            = end,
-               .handler        = handler,
-               .on_lock        = (void *)kvm_null_fn,
-               .flush_on_ret   = false,
-               .may_block      = false,
-       };
-
-       return __kvm_handle_hva_range(kvm, &range).ret;
+       return kvm_handle_hva_range(mn, start, end, handler, false);
 }
 
 void kvm_mmu_invalidate_begin(struct kvm *kvm)
 {
        trace_kvm_age_hva(start, end);
 
-       return kvm_handle_hva_range(mn, start, end, kvm_age_gfn);
+       return kvm_handle_hva_range(mn, start, end, kvm_age_gfn,
+                                   !IS_ENABLED(CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG));
 }
 
 static int kvm_mmu_notifier_clear_young(struct mmu_notifier *mn,