v1 2026-09-01

arm64支持128位页表 · v1

介绍 Arm FEAT_D128 128 位页表:用 pxdp_get 保证原子读,调整页表几何,暂不支持 56 位 VA 和 skip level。

原始补丁链接

子 Patch(17)

1/17
mm: Add read-write accessors for vm_page_prot
为vm_page_prot添加pgprot_read/write()访问器,默认使用READ_ONCE/WRITE_ONCE,便于arm64 D128页表扩展时重载。
2/17
arm64/mm: Convert READ_ONCE() as pmdp_get() while accessing PMD
将PMD的READ_ONCE()替换为pmdp_get(),为支持D128 128位页表做准备,避免READ_ONCE()的128位原子性问题。
3/17
arm64/mm: Convert READ_ONCE() as pudp_get() while accessing PUD
将PUD的READ_ONCE()替换为pudp_get(),为D128 128位页表做准备,避免READ_ONCE()原子性不足。
4/17
arm64/mm: Convert READ_ONCE() as p4dp_get() while accessing P4D
将P4D的READ_ONCE()替换为p4dp_get(),为D128 128位页表做准备,避免READ_ONCE()的128位原子性问题。
5/17
arm64/mm: Convert READ_ONCE() as pgdp_get() while accessing PGD
将PGD的READ_ONCE()替换为pgdp_get(),为D128 128位页表做准备,避免READ_ONCE()的128位原子性问题。
6/17
arm64/mm: Route all pgtable reads via ptval_get()
定义arm64的pxdp_get()实现,将所有页表读操作路由到ptval_get(),确保单拷贝原子语义,为D128做准备。
7/17
arm64/mm: Route all pgtable writes via ptval_set()
将所有页表写操作路由到ptval_set()(当前为WRITE_ONCE),为将来D128改用内联汇编保证原子性打基础。
8/17
arm64/mm: Route all pgtable atomics to central helpers
将页表的cmpxchg和xchg操作路由到新的ptval_cmpxchg_relaxed()和ptval_xchg_relaxed(),为D128做准备。
9/17
arm64/mm: Override read-write accessors for vm_page_prot
在arm64上重载pgprot_read/write(),使用ptval_get/set()保证vma->vm_page_prot的128位原子访问。
10/17
arm64/mm: Standardize printing for pgtable entries
标准化页表条目打印,使用通用ptval_bytes_to_hex_str(),并移动相关宏到核心mm头文件,为D128 128位打印做准备。
11/17
arm64/mm: Enable fixmap with 5 level page table
为FEAT_D128使能5级页表的fixmap,因D128减少每级PTRS需额外PGD级,添加pgd_page_paddr()的fallback。
12/17
arm64/mm: Enable pgtable geometry for FEAT_D128
添加CONFIG_ARM64_D128,更新PTE类型为128位,调整PTRS_PER_PXX、PGTABLE_LEVELS等几何宏,但暂不启用。
13/17
arm64/mm: Enable pgtable descriptor for FEAT_D128
扩展ptval_t为128位,添加D128描述符字段,更新ptval_get/set和xchg,禁用PA_BITS_52折叠,仅在D128配置生效。
14/17
arm64/mm: Enable 128 bit translation
启用D128 128位转换,要求同时支持FEAT_S1PIE和FEAT_D128,TTBR/PAR寄存器变为128位,使用MSRR/MRRS指令,否则panic。
15/17
arm64/mm: Add an abstraction level for tlbi_op
为TLB操作添加抽象层,支持D128引入的TLBIP指令,修改tlbi_op为函数指针,无功能变化。
16/17
arm64/mm: Enable TLBIP instruction based TLB flush
支持TLBIP指令用于TLB刷新,更新宏以支持页表级提示和地址范围,用于D128转换。
17/17
arm64/mm: Make ARM64_D128 selectable
允许用户选择ARM64_D128,需工具链支持新指令,所有前置更改已完成。