[PATCH v5 0/5] Implement Eager Page Splitting for RISC-V
Wang Yechao <[email protected]> Fri, 31 Jul 2026 17:12:05 +0800
| Newsgroups | org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Eager Page Splitting is implemented on x86 and ARM. It improves the performance of dirty logging (used in live migrations) when guest memory is backed by huge pages. This series implement Eager Page Splitting for RISC-V. The Implementation similar to x86 and ARM. It provides two ways to split huge pages in ioctl context instead of on fault in vCPU context: - Split huge pages when dirty logging is enabled when KVM_DIRTY_LOG_INITIALLY_SET is not set. This happens when enabling the KVM_MEM_LOG_DIRTY_PAGES flag of a memslot, and splits the whole memslot into 4K mappings. - Split huge pages during KVM_CLEAR_DIRTY_LOG when KVM_DIRTY_LOG_INITIALLY_SET is set. This happens when enabling dirty log in small chunks. It does not split the whole memslot, but only the requested chunk range. Changes in v5: - PATCH1: Move pgd_split_page_cache freeing to kvm_riscv_mmu_free_pgd(). - PATCH3: Add a comment to explain why TLB flush is not needed here. - Link to v4: https://lore.kernel.org/linux-riscv/[email protected]/ Changes in v4: - Rebase on v7.2-rc1 version. sashiko-bot AI review (https://sashiko.dev/#/patchset/[email protected]) - Add the rwlock_needbreak() check when toup split cache. - ALIGN_DOWN the start addr to PMD_SIZE. Changes in v3 resend: - Fix patch format to ensure emails reach the linux-riscv and kvm-riscv mailing lists. - Move the free pgd_split_page_cache into kvm_arch_destroy_vm(). https://lore.kernel.org/kvm-riscv/[email protected]/ Changes in v3: - Rebase on v7.1 version. - Add patch03 to remove the redundant TLB flush operations. sashiko-bot AI review (https://sashiko.dev/#/message/20260603104847.9692C1F00893%40smtp.kernel.org) - Check the kvm->arch.pgd before split huge pages. - Align the start address to PMD_SIZE before split. - Flushing remote TLBs before Dropping mmu_lock. Changes in v2: - Rename the split_page_cache. - Rename the kvm_riscv_split_huge_pages and kvm_riscv_split_memory_region. - Add lockdep_assert_held check before split huge pages. - Update Documentation/admin-guide/kernel-parameters.txt. - Link to v2 https://lore.kernel.org/linux-riscv/[email protected]/ - Link to v1: https://lore.kernel.org/linux-riscv/[email protected]/ Wang Yechao (5): RISC-V: KVM: Add the split page cache for ioctl context RISC-V: KVM: Split huge pages when dirty logging is enabled RISC-V: KVM: Remove redundant TLB flush operations RISC-V: KVM: Split huge pages during KVM_CLEAR_DIRTY_LOG RISC-V: KVM: Add the eager_page_split module parameter .../admin-guide/kernel-parameters.txt | 7 +- arch/riscv/include/asm/kvm_gstage.h | 6 +- arch/riscv/include/asm/kvm_host.h | 1 + arch/riscv/kvm/gstage.c | 23 ++-- arch/riscv/kvm/mmu.c | 100 +++++++++++++++++- 5 files changed, 120 insertions(+), 17 deletions(-) -- 2.39.3 -- kvm-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kvm-riscv