Re: [PATCH v5 0/5] Implement Eager Page Splitting for RISC-V

Anup Patel <[email protected]> Sat, 1 Aug 2026 14:05:29 +0530
Newsgroups org.kernel.vger.kvm,org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.linux-kernel
Message-ID <CAAhSdy15rQDkLVncPmdQ3+tKyFXv6HiuUe1=xKCG+Q1rzBOqVA@mail.gmail.com>
On Fri, Jul 31, 2026 at 2:45 PM Wang Yechao <[email protected]> wrote:
>
> 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(-)
>

Queued this series for Linux-7.3

Thanks,
Anup