v1 2026-08-25

批量处理PSTATE.TCO降低nofault开销 · v1

为硬件标签 KASAN 的 nofault 循环引入批量 TCO 处理,使 maccess/BPF 路径 MSR 操作从 2N 降至 2。

原始补丁链接

子 Patch(7)

1/7
arm64: uaccess: Add batched kernel nofault accessors
arm64 新增批量 nofault begin/end 钩子,将 PSTATE.TCO 管理从单个访问中分离,避免 HW-TASAN async/asym 下每次访问切换;区域不可调度,且先求值参数再覆盖 TCO。
2/7
uaccess: Add scope guard for bare kernel nofault regions
新增 nofault scope guard,进入区域时开启批量 nofault,退出时自动执行 end hook,避免手写配对在提前返回/错误路径漏恢复架构状态,调用者可保持自然控制流。
3/7
maccess: Skip setup for zero-sized kernel nofault copies
零长度 nofault copy 仍会切换 page fault 状态;在改动状态前直接返回,读路径保留地址校验,避免无意义的 disable/enable 开销且行为不变。
4/7
maccess: Use a scoped guard for page faults
[Re: [PATCH 4/7] maccess: Use a scoped guard for page faults] On 8/24/26 18:04, Muhammad Usama Anjum wrote: > Kernel nofault copy and string paths open-code page-fault disable and > enable around labe
5/7
maccess: Batch TCO handling in kernel nofault loops
maccess 将每个非空操作放入单个 bare nofault region,循环内使用 bare accessor,使 arm64 TCO 切换由 2N 次降为 2 次;离开 region 时恢复 TCO 再开 page fault。
6/7
bpf: Skip setup for zero-length string kfunc operations
BPF 字符串 kfunc 在 limit=0 时仍进入 page-fault-disabled 区域;先校验地址并返回已有空结果,再跳过 page fault 状态切换,使无效指针继续返回 -ERANGE。
7/7
bpf: Batch TCO handling in string kfuncs
BPF 字符串 kfunc 改用 bare nofault loads,整个字符串操作持有一个 nofault region,scope guard 保证成功或访问 fault 退出时恢复 TCO;字符比较的 TCO 切换从 4N 降到 2。