v1 2026-07-16

简化特殊内核页表处理 · v1

计划将通用页表处理移至pagetable_{alloc,free}(),仅对用户页表保留ctor/dtor并重命名。

原始补丁链接

子 Patch(22)

1/22
mm: drop unused __mm_flags_set_mask_bits_word()
移除无调用者的 __mm_flags_set_mask_bits_word(),该专用辅助函数在 coredump 改用 bitmap 后已无用途。
2/22
mm: move mm_flags helpers to mm_types.h
将所有 mm_flags 辅助函数集中到 mm_types.h,避免跨头文件依赖,为后续在 mm_types.h 中调用这些函数做准备。
3/22
mm: introduce MMF_KERNEL flag and set it for init_mm
[Re: [PATCH 03/22] mm: introduce MMF_KERNEL flag and set it for init_mm] On 7/14/26 07:03, Kevin Brodsky wrote: > +static inline bool mm_is_kernel(const struct mm_struct *mm) > +{ > + return mm && mm_
4/22
mm: use mm_is_kernel() in generic page table code
在通用页表代码中使用 mm_is_kernel() 替代 init_mm 比较,使标记了 MMF_KERNEL 的内核 mm 可共享页表处理逻辑。
5/22
arm64: mm: use mm_is_kernel() for kernel mm checks
将 arch/arm64 中多处直接比较 &init_mm 改为调用 mm_is_kernel(),为后续扩展 MMF_KERNEL 标志做准备,无功能变化。
6/22
loongarch: mm: use mm_is_kernel() in switch_mm_irqs_off()
在 loongarch 的 switch_mm_irqs_off() 中用 mm_is_kernel() 替代 &init_mm 比较,统一内核 mm 检测方式。
7/22
parisc: mm: use mm_is_kernel() for kernel mm checks
在 parisc 的 mmu_context/pgalloc/tlbflush 中用 mm_is_kernel() 替代 &init_mm 比较,为后续支持 efi_mm 等内核 mm 铺垫。
8/22
powerpc: mm: use mm_is_kernel() for kernel mm checks
在 powerpc 的 pgalloc/pgtable/mmu_context 中用 mm_is_kernel() 替代 &init_mm 比较,统一内核 mm 判断逻辑。
9/22
s390: mm: use mm_is_kernel() for kernel mm checks
在 s390 的 mmu_context/pgtable/pgalloc 中用 mm_is_kernel() 替代 &init_mm 比较,简化内核 mm 识别。
10/22
sparc: mm: use mm_is_kernel() for kernel mm checks
在 sparc 的 mmu_context/pgtable/tlb 中用 mm_is_kernel() 替代 &init_mm,并移除 init_mm 前向声明,改用 mm_types.h。
11/22
um: mm: use mm_is_kernel() in TLB sync
在 um 的 TLB 同步中用 mm_is_kernel() 替代 &init_mm 比较,统一内核 mm 检测方式。
12/22
x86/mm: use mm_is_kernel() for kernel mm checks
在 x86 的 tlbflush/pgtable/tlb 中用 mm_is_kernel() 替代 &init_mm 比较,为后续支持 efi_mm 等内核 mm 做准备。
13/22
mm: account page table pages when allocated
将页表内存统计从 ctor/dtor 移到 pagetable_alloc/free,确保 split_large_page 等缺失 ctor 的场景也能正确记账。
14/22
mm: set page table page type when allocated
将页表页类型设置从 ctor/dtor 移到 pagetable_alloc/free,移除空的 __pagetable_ctor(),确保 split_large_page 等场景正确设置页类型。
15/22
mm: only initialise pt_share_count for user pgtables
在 ptdesc_pmd_pts_init() 中跳过内核页表的 pt_share_count 初始化,该字段仅用于用户页表的 hugetlb 跟踪。
16/22
efi: mark efi_mm as a kernel mm
为 efi_mm 设置 MMF_KERNEL 标志,使其页表操作与 init_mm 一致,避免不必要的 split ptlock 和 ctor/dtor 调用。
17/22
mm: pagewalk: drop redundant address check for kernel mm walks
移除 pagewalk 中针对 EFI_PGT_DUMP 的地址检查,因 efi_mm 已标记 MMF_KERNEL,mm_is_kernel() 足以选择 pte_offset_kernel。
18/22
arm64: mm: drop explicit mm_is_efi() check in contpte
在 arm64 contpte 中移除 mm_is_efi() 检查,改用 mm_is_kernel() 判断,因 efi_mm 已标记 MMF_KERNEL,mm_is_user() 等价于 !mm_is_kernel。
19/22
x86/tboot: mark tboot_mm as a kernel mm
为 tboot_mm 设置 MMF_KERNEL 标志,并将 pte_alloc_map 改为 pte_alloc_kernel,使其页表分配走内核路径。
20/22
arm64: mm: drop ctor/dtor calls for kernel page tables
在 arm64 mmu.c 中移除内核页表的 ctor/dtor 调用,因这些函数对内核页表已无操作,同时简化分配函数参数。
21/22
arm: mm: drop ctor call for kernel page tables
在 arm mmu.c 中移除内核页表的 pte_ctor 调用,因该函数对内核页表已无操作,简化分配逻辑。
22/22
riscv: mm: drop ctor/dtor calls for kernel page tables
Thanks to recent changes: * pagetable_*_ctor() and pagetable_dtor() do nothing for kernel page tables. * efi_mm is also treated like a kernel mm by the page table logic, including ctors. We can