v17 2026-07-21

arm64转换为通用入口 · v17

将 arm64 架构转换为使用通用入口框架,与 x86/RISC-V/LoongArch 保持一致。

原始补丁链接

子 Patch(15)

1/15
arm64: ptrace: Skip syscall exit reporting for PTRACE_SYSEMU_SINGLESTEP
在 syscall 退出路径中,当 _TIF_SYSCALL_EMU 置位时,report_single_step() 返回 false,避免 PTRACE_SYSEMU_SINGLESTEP 触发多余的 exit-stop,与 x86 行为一致。
2/15
arm64: ptrace: Rework audit_syscall_entry()
提取 syscall_enter_audit() 辅助函数,改用 syscall_get_nr() 和 syscall_get_arguments() 通用接口,使 arm64 的审计入口与 generic entry 实现等价,为后续迁移做准备。
3/15
arm64: ptrace: Open-code seccomp check in syscall_trace_enter()
在 syscall_trace_enter() 中内联展开 seccomp 检查,ptrace 处理后重读 thread flags 并直接调用 __seccomp_permit_syscall(),对齐 generic entry 的 seccomp 处理流程。
4/15
arm64: ptrace: Rename and clean up syscall_trace_enter()
将 syscall_trace_enter() 重命名为 arm64_syscall_trace_enter(),并用 syscall_get_nr() 替代直接访问 regs->syscallno,避免命名冲突并解耦 pt_regs 布局。
5/15
arm64: ptrace: Protect rseq_syscall() from tracer PC modifications
将 rseq_syscall() 检查提前到 report_syscall_exit() 之前执行,确保它看到原始的 regs->pc,防止 tracer 通过 PTRACE_SETREGSET 修改 PC 后导致 rseq 检测失效。
6/15
arm64: syscall: Rework the syscall exit path in el0_svc_common()
反转 el0_svc_common() 中嵌套的条件标志检查逻辑,将内部 if 改为外部 if,使控制流更清晰,为后续迁移到 generic entry 做准备。
7/15
arm64: ptrace: Pass thread flags to trace enter/exit
将 thread flags 的读取从 arm64_syscall_trace_enter() 和 syscall_trace_exit() 移到调用方 el0_svc_common(),函数签名改为接收 flags 参数,对齐 generic entry 的调用约定。
8/15
arm64: ptrace: Extract arm64_syscall_exit_to_user_mode_work() helper
提取 arm64_syscall_exit_to_user_mode_work() 辅助函数,封装重读 flags 和调用 syscall_trace_exit(),消除 el0_svc_common() 中重复的 flags 读取,对齐 generic entry 的 exit 回调模式。
9/15
arm64: ptrace: Align syscall exit work semantics with generic entry
引入 _TIF_SYSCALL_EXIT_WORK 聚合退出标志,将 rseq_syscall() 移出 arm64_syscall_exit_work() 使其无条件执行,并重命名函数,对齐 generic entry 的 exit 语义。
10/15
arm64: syscall: Use exit-specific flags check in el0_svc_common()
在 el0_svc_common() 的退出路径中使用 _TIF_SYSCALL_EXIT_WORK 替代全局 _TIF_SYSCALL_WORK,排除仅入口需要的 SECCOMP 和 EMU 标志,避免不必要的退出工作执行。
11/15
arm64: syscall: Simplify el0_svc_common() syscall exit path
On 7/21/2026 4:51 PM, Linus Walleij wrote: > On Tue, Jul 21, 2026 at 10:19 AM Jinjie Ruan ruanjinjie@huawei.com wrote: > » Remove the redundant nested conditional check within the system call » e
12/15
arm64: ptrace: Make return type of arm64_syscall_trace_enter() bool
将 arm64_syscall_trace_enter() 返回值改为 bool,true 时从 regs 重读 syscall 号,避免 tracer 设置 -1 后 invoke_syscall() 覆盖自定义 x0 为 -ENOSYS。
13/15
arm64: entry: Convert to generic entry
选择 GENERIC_ENTRY,将 thread_info 的 syscall 相关 TIF 标志迁移到 syscall_work 字段,删除自定义标志定义,使 arm64 接入通用 syscall 入口/退出框架。
14/15
arm64: Inline el0_svc_common()
强制内联 el0_svc_common() 到 do_el0_svc(),消除函数序言/尾声开销,在 Kunpeng 920 上获得约 1% 的 syscall 性能提升。
15/15
arm64: vdso: Expose sigreturn address on vdso to the kernel
On Tue, Jul 21, 2026 at 05:23:38PM +0800, Jinjie Ruan wrote: (…) > » arch/arm64/Kconfig | 1 + > » arch/arm64/include/asm/elf.h | 1 + > » arch/arm64/kernel/vdso.c