* @mask:      The mask of pages at offset 'gfn_offset' in this memory
  *             slot to enable dirty logging on
  *
- * Writes protect selected pages to enable dirty logging for them. Caller must
- * acquire kvm->mmu_lock.
+ * Writes protect selected pages to enable dirty logging, and then
+ * splits them to PAGE_SIZE. Caller must acquire kvm->mmu_lock.
  */
 void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
                struct kvm_memory_slot *slot,
        lockdep_assert_held_write(&kvm->mmu_lock);
 
        stage2_wp_range(&kvm->arch.mmu, start, end);
+
+       /*
+        * Eager-splitting is done when manual-protect is set.  We
+        * also check for initially-all-set because we can avoid
+        * eager-splitting if initially-all-set is false.
+        * Initially-all-set equal false implies that huge-pages were
+        * already split when enabling dirty logging: no need to do it
+        * again.
+        */
+       if (kvm_dirty_log_manual_protect_and_init_set(kvm))
+               kvm_mmu_split_huge_pages(kvm, start, end);
 }
 
 static void kvm_send_hwpoison_signal(unsigned long address, short lsb)