[PATCH] RISC-V: KVM: Enhance the logging check for mmu mapping

Anup Patel anup at brainfault.org
Fri Jun 5 07:54:21 PDT 2026


On Thu, May 28, 2026 at 5:08 PM Inochi Amaoto <inochiama at gmail.com> wrote:
>
> When enabling dirty ring, the dirty bitmap is disable, and the logging
> check is always false as the RISC-V architecture does not select
> "NEED_KVM_DIRTY_RING_WITH_BITMAP". Although the dirty log is recorded
> since the write path already trying to add the dirty log, the logic for
> logging check is broken and some side effect will occurs.
>
> Enhance the logging check for mmu mapping so it can check both the dirty
> ring and the dirty bitmap.
>
> Signed-off-by: Inochi Amaoto <inochiama at gmail.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Queued this patch for Linux-7.2

Thanks,
Anup

> ---
>  arch/riscv/kvm/mmu.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c
> index 2d3def024270..b5873bca9dce 100644
> --- a/arch/riscv/kvm/mmu.c
> +++ b/arch/riscv/kvm/mmu.c
> @@ -142,9 +142,8 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
>                                 enum kvm_mr_change change)
>  {
>         /*
> -        * At this point memslot has been committed and there is an
> -        * allocated dirty_bitmap[], dirty pages will be tracked while
> -        * the memory slot is write protected.
> +        * At this point memslot has been committed and dirty pages will be
> +        * tracked while the memory slot is write protected.
>          */
>         if (change != KVM_MR_DELETE && new->flags & KVM_MEM_LOG_DIRTY_PAGES) {
>                 if (kvm_dirty_log_manual_protect_and_init_set(kvm))
> @@ -433,8 +432,8 @@ int kvm_riscv_mmu_map(struct kvm_vcpu *vcpu, struct kvm_memory_slot *memslot,
>         struct vm_area_struct *vma;
>         struct kvm *kvm = vcpu->kvm;
>         struct kvm_mmu_memory_cache *pcache = &vcpu->arch.mmu_page_cache;
> -       bool logging = (memslot->dirty_bitmap &&
> -                       !(memslot->flags & KVM_MEM_READONLY)) ? true : false;
> +       bool logging = kvm_slot_dirty_track_enabled(memslot) &&
> +                      !(memslot->flags & KVM_MEM_READONLY);
>         unsigned long vma_pagesize, mmu_seq;
>         struct kvm_gstage gstage;
>         struct page *page;
> --
> 2.54.0
>



More information about the linux-riscv mailing list