mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
RISC-V: KVM: Fix skip of valid pages in kvm_riscv_gstage_unmap_range
Same as kvm_riscv_gstage_wp_range, the possible valid pages should not be skipped if !found_leaf. Different from wp case, which can write-protect more than asked, unmap can't do that, no splitting is added right now but a warning is logged instead. Signed-off-by: Wu Fei <wu.fei9@sanechips.com.cn> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20260604230317.30501-3-atwufei@163.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
0d9dc20842
commit
a5f8307e2e
|
|
@ -418,15 +418,19 @@ bool kvm_riscv_gstage_unmap_range(struct kvm_gstage *gstage,
|
|||
if (ret)
|
||||
break;
|
||||
|
||||
if (!found_leaf)
|
||||
goto next;
|
||||
if (!found_leaf) {
|
||||
addr = ALIGN(addr + 1, page_size);
|
||||
} else {
|
||||
if (!(addr & (page_size - 1)) && ((end - addr) >= page_size))
|
||||
flush |= kvm_riscv_gstage_op_pte(gstage, addr, ptep,
|
||||
ptep_level, GSTAGE_OP_CLEAR);
|
||||
else {
|
||||
WARN_ONCE(1, "Skip unmap range addr: %#llx, end: %#llx, page_size: %#lx\n",
|
||||
addr, end, page_size);
|
||||
}
|
||||
|
||||
if (!(addr & (page_size - 1)) && ((end - addr) >= page_size))
|
||||
flush |= kvm_riscv_gstage_op_pte(gstage, addr, ptep,
|
||||
ptep_level, GSTAGE_OP_CLEAR);
|
||||
|
||||
next:
|
||||
addr += page_size;
|
||||
addr += page_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the range is too large, release the kvm->mmu_lock
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user