v2 2026-11-06

权限升级不撤销次级 MMU 映射 · v2

新增 MMU notifier 标志标识严格权限升级,change_protection() 保留可写 PTE,使 KVM 在 x86/s390 上不再提前 zap 次级 MMU 映射。

原始补丁链接

子 Patch(9)

1/9
mm: fix eager write-bit restore for write-notified shared mappings
修正共享写通知映射的写位恢复:vma_wants_writenotify()比较vm_page_prot与vma_pgprot_modify()结果时写位不一致,误判后不置MM_CP_TRY_CHANGE_WRITABLE,脏PTE仍只读。
2/9
riscv: mm: add pud_soft_dirty()
riscv新增pud_soft_dirty(),读取PUD级soft-dirty位,使通用代码可在支持soft-dirty和PUD THP的riscv上检查大PUD的软脏状态。
3/9
mm/huge_memory: honor MM_CP_TRY_CHANGE_WRITABLE in change_huge_pud()
change_huge_pud() 忽略 MM_CP_TRY_CHANGE_WRITABLE,soft-dirty 后 device DAX 的可写 PUD 被置只读,写入徒增缺页;令其按标志恢复写位,与 PTE/PMD 路径一致。
4/9
mm/mprotect: add MM_CP_PERM_UPGRADE
新增 MM_CP_PERM_UPGRADE:mprotect() 仅增加读/写/执行权限时传给 change_protection(),标记不换 PFN、不撤权限的升级,供 MMU notifier 跳过无效失效。
5/9
mm/mprotect: keep writable entries writable on permission upgrades
在仅增权限的 change_protection() 中,vm_page_prot 缺写位会把原本可写但干净的共享 PTE 置只读;依据 MM_CP_PERM_UPGRADE 保留 PTE/PMD/PUD 写位,避免写缺页。
6/9
mm/mmu_notifier: add MMU_NOTIFIER_RANGE_PERM_UPGRADE
新增 MMU_NOTIFIER_RANGE_PERM_UPGRADE,change_protection() 对 MM_CP_PERM_UPGRADE 和 uffd resolve 置位,表明只恢复权限;二级 MMU 可保留映射,hugetlb 因不恢复写位仍不置位。
7/9
KVM: pass the mmu_notifier event and flags to kvm_gfn_range
把 mmu_notifier 事件和 flags 传入 struct kvm_gfn_range,供架构 MMU 处理器识别 MMU_NOTIFIER_RANGE_PERM_UPGRADE 等类型;当前未消费,无功能变化。
8/9
KVM: x86/mmu: don't zap secondary MMU on permission upgrade
x86 KVM 在 MMU_NOTIFIER_RANGE_PERM_UPGRADE 时不再 zap SPTE,因 PFN 未变且未撤访问,权限留待下次缺页更新;避免 uffd-wp 背景快照下整工作集重缺页和 TLB shootdown。
9/9
KVM: s390: don't unmap the gmap on permission upgrade
s390 gmap 在权限升级失效时保留现有条目;若条目仍只读,写入触发保护异常,由 kvm_s390_faultin_gfn() 按写缺页取新权限,适用于 s390 与 arm64 guest。