v1
2026-10-16
重启用PMD级THP丢弃 · v1
修复PMD级丢弃lazyfree THP时pmdp_invalidate语义问题,并重新启用该优化,避免页表状态错误同时恢复THP释放效率。
原始补丁链接
子 Patch(7)
1/7
powerpc/book3s64/mm: don't count invalidated PMDs in page table check
powerpc pmdp_invalidate() 产生的 invalid PMD 仍被 pmd_user_accessible_page() 当作有效用户映射,导致后续 set_pmd_at()/清理再次减 page table check 计数而下溢 BUG;改为只统计硬件有效项。
2/7
riscv: mm: don't let GUP-fast follow invalidated THP PMDs
On Thu Oct 15, 2026 at 2:13 PM EDT, Zi Yan wrote: > pmdp_invalidate() leaves a PMD whose pmd_present() is still true, so the > generic pmd_access_permitted() returns true for an invalidated PMD. Then
3/7
LoongArch: mm: don't let GUP-fast follow invalidated THP PMDs
LoongArch 增加 pmd_access_permitted(),要求 _PAGE_PRESENT,使 GUP-fast 不再跟随 pmdp_invalidate() 留下 pmd_present() 仍真的失效 THP PMD,避免其拿 folio 引用破坏依赖引用计数的回收判断。
4/7
s390/mm: always clear _SEGMENT_ENTRY_READ in pmdp_invalidate()
s390 的 pmdp_invalidate() 现在无条件清除 _SEGMENT_ENTRY_READ,使失效 PMD 成为 pmd_protnone();否则 _SEGMENT_ENTRY_INVALID 只表示非 young,GUP-fast 仍会跟随并抓引用,破坏依赖引用计数的映射回收。
5/7
sparc64: mm: fix thp_pte_count accounting around pmdp_invalidate()
sparc64 将 thp_pte_count 改为只跟踪同时 _PAGE_PMD_HUGE 且 _PAGE_VALID 的 PMD,并由 __set_pmd_acct() 统一调整;去掉 pmdp_invalidate() 的单独递减,修复失效后又 set_pmd_at() 装回 huge 时计数持续丢失。
6/7
mm/huge_memory: avoid transient none PMDs during lazyfree reclaim
lazyfree 回收先清 PMD 再判断丢弃,失败恢复期间留下 none PMD,并发 zap/mremap 可无锁跳过,导致 anon_vma UAF;改用 pmdp_invalidate() 保留非 none 失效 PMD 迫使并发路径同步。
7/7
mm/rmap: re-enable discarding lazyfree THPs at PMD level
On Thu Oct 15, 2026 at 2:13 PM EDT, Zi Yan wrote: > The patch “mm/rmap: don’t discard lazyfree THPs at PMD level” disabled > the PMD-level discard, because it cleared the PMD before checking whether >