v3
2026-11-06
修复 hugetlb CMA 解析与记账 · v3
拒绝在节点条目之后再设全局 hugetlb_cma 大小,vmemmap 恢复失败时保留 CMA/hwpoison 等持久 folio 标志,并清理 NR_HUGETLB 记账。
原始补丁链接
子 Patch(4)
1/4
mm/hugetlb_cma: fix incorrect hugetlb_cma_size assignment on malformed input
cmdline_parse_hugetlb_cma() 在 node 条目后遇到全局大小会重解析原串,把 node ID 当一字节全局大小并清掉已有预留;改为在更新前对全局项跟在 node 项之后返回 -EINVAL,保留合法前缀。
2/4
mm/hugetlb: Preserve persistent flags when returning folios to the pool
add_hugetlb_folio() 回滚时只保留 HPG_vmemmap_optimized,丢失 HPG_cma 会让 CMA 位图泄漏,丢失 HPG_raw_hwp_unreliable 会误判毒页;改为保留原有标志,并在 free_huge_folio() 清理 HPG_temporary、加 WARN 检查残留标志。
3/4
mm/hugetlb: fix NR_HUGETLB accounting for unused surplus folios
free_huge_folio() 无条件递减 NR_HUGETLB,但新 surplus folio 在计数增加前就可能被释放(二次限额拒绝、预留失败或并发池变化),导致少计/下溢;在两处 free_huge_folio() 前补加 NR_HUGETLB。
4/4
mm/hugetlb: Account NR_HUGETLB at folio state transitions
把 NR_HUGETLB 记账集中到 folio 状态转换:从 free pool 取出或新分配 surplus/migration 时加,归还或移出使用时减;memcg 统计拆到 mod_hugetlb_memcg_state(),在 charge 成功后、uncharge 前更新,去掉入口和清理路径的冗余更新。