v10
2026-07-23
HMM支持userfaultfd时释放mmap锁 · v10
提交v10系列,添加hmm_range_fault_unlocked_timeout()以支持mmap锁释放的缺页处理。
原始补丁链接
子 Patch(8)
1/8
mm/hmm: move page fault handling out of walk callbacks
将缺页处理从walk回调中移出,避免walk_page_range持有嵌套锁时调用handle_mm_fault可能释放mmap_lock导致的use-after-free。
2/8
mm/hmm: add hmm_range_fault_unlocked_timeout() for mmap lock-drop support
新增hmm_range_fault_unlocked_timeout(),内部管理mmap_lock获取/释放,支持VM_FAULT_RETRY场景,解决userfaultfd等映射无法使用HMM的问题。
3/8
selftests/mm: add HMM test for mmap lock-dropping faults
添加selftest,通过新ioctl HMM_DMIRROR_READ_UNLOCKED和userfaultfd验证hmm_range_fault_unlocked_timeout()处理mmap_lock释放路径的正确性。
4/8
mshv: Use hmm_range_fault_unlocked_timeout() for region faults
MSHV改用hmm_range_fault_unlocked_timeout(),让HMM内部管理mmap_lock,支持userfaultfd等会释放锁的VMA缺页处理。
5/8
drm/nouveau: Use hmm_range_fault_unlocked_timeout() for SVM faults
Nouveau SVM改用hmm_range_fault_unlocked_timeout(),由HMM管理mmap_lock和notifier_seq刷新,外层保留超时预算控制重试。
6/8
RDMA/umem: Use hmm_range_fault_unlocked_timeout() for ODP faults
RDMA ODP改用hmm_range_fault_unlocked_timeout(),由HMM管理mmap_lock和内部重试,简化ib_umem_odp_map_dma_and_lock()代码。
7/8
accel/amdxdna: Use hmm_range_fault_unlocked_timeout() for range population
amdxdna驱动改用hmm_range_fault_unlocked_timeout(),由HMM管理mmap_lock和notifier_seq刷新,移除open-coded的序列设置逻辑。
8/8
drm/gpusvm: Use hmm_range_fault_unlocked_timeout() for range faults
GPU SVM路径改用hmm_range_fault_unlocked_timeout(),由HMM管理mmap_lock,drm_gpusvm_check_pages()因调用者已持锁而保留原接口。