v15 2026-09-25

设备页缺页时迁移 · v15

回应质疑,说明系列让 migrate_vma_setup 通过 hmm_range_fault 收集并迁移设备页,减少驱动多次页表遍历。

原始补丁链接

子 Patch(11)

1/11
mm/Kconfig: changes for migrate on fault for device pages
在 mm/Kconfig 为 MIGRATE_DEVICE 显式依赖 HMM 与 MMU_NOTIFIER,满足统一 HMM/migrate_device 页表遍历,避免随机配置下 HMM 未启用。
2/11
mm: add helper to convert HMM pfn to migrate pfn
新增 HMM pfn 到 migrate pfn 转换 helper,使 HMM 页表遍历收集结果能传给 migrate_vma,补齐 migrate_device 侧接口。
3/11
mm/hmm: preparations for HMM to participate in migration
hmm_range_fault() 遍历时保存 vma;迁移要求全程持 mmap_lock、禁 drop,并触发 mmu_notifier;重命名 hmm_vma_walk 字段避免冲突。
4/11
mm/hmm: do the plumbing for HMM to participate in migration
在 hmm_range_fault() 的 pmd/pte 遍历中为迁移加页表锁,保持 hmm_vma_handle_* 与新增 hmm_vma_handle_migrate_prepare* 回调间锁住,解锁后再缺页。
5/11
mm/hmm: migrate collection in HMM pagewalk - pte level
实现 PTE 级收集:移植 migrate_vma_collect_pmd() 为 hmm_vma_handle_migrate_prepare(),新增 migrate_vma_split_folio() 拆大 folio,锁前取引用,按 HMM_PFN_MIGRATE 插 migration PTE。
6/11
mm/hmm: migrate collection in HMM pagewalk - pmd level
实现 PMD 级收集,移植 migrate_vma_collect_huge_pmd() 为 hmm_vma_handle_migrate_prepare_pmd();修正旧 split fallback 多引用致 split_folio() 失败、解锁错 folio。
7/11
mm/hmm: add lazy MMU mode support for migration in HMM pagewalk
在迁移路径调用 lazy_mmu_mode_enable()/disable(),批量改 PTE/PMD 并插 migration 项时延迟 MMU 同步,降低开销。
8/11
mm/hmm: implement rollback for device page migration in HMM pagewalk
加回滚:丢锁后 PTE 表可能被清或变 PMD,已插 migration PTE 消失;再次收集遇已置 HMM_PFN_MIGRATE 则解锁 folio、放引用,遇 migration PTE 跳过以重启。
9/11
mm: enable device page migration from HMM pagewalk
启用 HMM 页表遍历迁移:hmm_range_fault() 收集并插 migration PTE,migrate_vma_setup() 改走 HMM;新增 MIGRATE_VMA_FAULT/WRITE 请求缺页与写权限。
10/11
lib/test_hmm: add a new testcase for the migrate on fault
扩展 lib/test_hmm 和 hmm-tests,新增 migrate-on-fault 用例,覆盖 hmm_range_fault() 收集设备页并插 migration PTE 的新路径。
11/11
Documentation/mm/hmm: document migration through hmm_range_fault()
更新 HMM 文档,说明 MIGRATE_VMA_FAULT/WRITE 新标志,并记录经 HMM_PFN_REQ_MIGRATE 与 migrate_hmm_range_setup() 从 hmm_range_fault() 驱动迁移收集。