Re: [PATCH] RISC-V: KVM: Enhance the logging check for mmu mapping
Anup Patel <[email protected]>
| Newsgroups | org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAAhSdy096z4SdwQKBxM0ZtE5=i3UZrhMD-BcES9UdP5OgajqEA@mail.gmail.com> |
On Thu, May 28, 2026 at 5:08 PM Inochi Amaoto <[email protected]> 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 <[email protected]> > --- > 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; Why is this not correct approach to determine whether logging is enabled ? KVM ARM64 does a very similar thing (Refer, memslot_is_logging() in arch/arm64/kvm/mmu.c). > + 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 > Regards, Anup -- kvm-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kvm-riscv