]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
RISC-V: KVM: Fix lost write protection on huge pages during dirty logging
authorWang Yechao <wang.yechao255@zte.com.cn>
Mon, 30 Mar 2026 08:10:52 +0000 (16:10 +0800)
committerAnup Patel <anup@brainfault.org>
Mon, 30 Mar 2026 08:31:01 +0000 (14:01 +0530)
commita216e24fc947573bfbd56471bd7c1f1d8c7a2b19
tree2a464145d111eb99cc926795f358c2d8f4c25406
parent1762ac42eed653557d2feb9e37f45995ac238ce6
RISC-V: KVM: Fix lost write protection on huge pages during dirty logging

When enabling dirty log in small chunks (e.g., QEMU default chunk
size of 256K), the chunk size is always smaller than the page size
of huge pages (1G or 2M) used in the gstage page tables. This caused
the write protection to be incorrectly skipped for huge PTEs because
the condition `(end - addr) >= page_size` was not satisfied.

Remove the size check in `kvm_riscv_gstage_wp_range()` to ensure huge
PTEs are always write-protected regardless of the chunk size. Additionally,
explicitly align the address down to the page size before invoking
`kvm_riscv_gstage_op_pte()` to guarantee that the address passed to the
operation function is page-aligned.

This fixes the issue where dirty pages might not be tracked correctly
when using huge pages.

Fixes: 9d05c1fee837 ("RISC-V: KVM: Implement stage2 page table programming")
Signed-off-by: Wang Yechao <wang.yechao255@zte.com.cn>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/202603301610527120YZ-pAJY6x9SBpSRo1Wg4@zte.com.cn
Signed-off-by: Anup Patel <anup@brainfault.org>
arch/riscv/kvm/gstage.c