[PATCH] KVM: riscv: Set Accessed bit in dirty-log write fault fast path
Jinyu Tang
jinyu.tang at linux.dev
Wed Oct 21 04:30:10 PDT 2026
On Fri, Oct 16, 2026 at 07:14:58PM +0900, SeungJu Cheon wrote:
> @@ -591,14 +591,15 @@ static bool kvm_riscv_mmu_dirty_log_write_fault_fast(struct kvm *kvm,
> dirty_marked = true;
> }
>
> - if ((pte_val(old_pte) & (_PAGE_WRITE | _PAGE_DIRTY)) ==
> - (_PAGE_WRITE | _PAGE_DIRTY)) {
> + if ((pte_val(old_pte) &
> + (_PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED)) ==
> + (_PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED)) {
> new_pte = old_pte;
> ret = true;
> break;
> }
>
> - new_pte = pte_mkdirty(pte_mkwrite_novma(old_pte));
> + new_pte = pte_mkyoung(pte_mkdirty(pte_mkwrite_novma(old_pte)));
I tested this on QEMU 10.2.1 with Svade enabled and Svadu disabled.
With dirty logging enabled, the test clears A through page-idle tracking,
write-protects the page with KVM_GET_DIRTY_LOG, and resumes the guest
write. The unpatched kernel times out after 10 seconds, while the same
test completes with this patch applied.
Reviewed-by: Jinyu Tang <jinyu.tang at linux.dev>
Thanks,
Jinyu
More information about the linux-riscv
mailing list