v4
2026-10-22
fork 复制 PMD 对齐 PTE 路径 · v4
让 copy_huge_pmd() 在页表锁下用 vm_normal_page_pmd() 判断,像 PTE 路径一样复制文件 THP,并修复 folio_dup_file_rmap_pmd() 把 PMD 映射重复成 HPAGE_PMD_NR 个 PTE 的 rmap 错误。
原始补丁链接
子 Patch(4)
1/4
mm/rmap: duplicate a PMD mapping as one in folio_dup_file_rmap_pmd()
[Re: [PATCH v4 1/4] mm/rmap: duplicate a PMD mapping as one in folio_dup_file_rmap_pmd()] On 10/21/26 22:43, Zi Yan wrote: > On 21 Oct 2026, at 16:36, Konstantin Khorenko wrote: > » folio_dup_file_r
2/4
mm/huge_memory: copy file THPs at fork like copy_present_ptes() does
copy_huge_pmd() 原先跳过非匿名 folio PMD,让子进程重新缺页;现对文件 THP 像 copy_present_ptes() 一样取 folio 引用、复制 rmap、计 mm 计数,并处理 DAX huge zero 与迁移项,减少子进程缺页。
3/4
mm/huge_memory: read a special PMD under the lock in copy_huge_pmd()
copy_huge_pmd() 未持 PMD 锁就读取并复制 special PMD,unmap_mapping_range() 可并发清除父项,导致子进程保留驱动已撤销映射或 ppc64 hash 模式空 page table;改为先加锁,再用 vm_normal_page_pmd() 在锁下区分 PFN/folio 并复制。
4/4
selftests/mm: test fork of PMD-mapped shmem THPs
新增fork_file_thp自测:fork后子进程查PMD映射,退出后校验父映射与ShmemPmdMapped不变,暴露folio_dup_file_rmap_pmd()重复计数导致坏页缓存的问题。