]> git.ipfire.org Git - thirdparty/linux.git/commit
entry: Inline syscall_exit_work() and syscall_trace_enter()
authorJinjie Ruan <ruanjinjie@huawei.com>
Wed, 28 Jan 2026 03:19:33 +0000 (11:19 +0800)
committerThomas Gleixner <tglx@kernel.org>
Fri, 30 Jan 2026 14:38:10 +0000 (15:38 +0100)
commit31c9387d0d84bc1d643a0c30155b6d92d05c92fc
tree455198e1fcb8e9381fd02fc444a1113ddb0a4979
parent578b21fd3ab2d9901ce40ed802e428a41a40610d
entry: Inline syscall_exit_work() and syscall_trace_enter()

After switching ARM64 to the generic entry code, a syscall_exit_work()
appeared as a profiling hotspot because it is not inlined.

Inlining both syscall_trace_enter() and syscall_exit_work() provides a
performance gain when any of the work items is enabled. With audit enabled
this results in a ~4% performance gain for perf bench basic syscall on
a kunpeng920 system:

    | Metric     | Baseline    | Inlined     | Change  |
    | ---------- | ----------- | ----------- | ------  |
    | Total time | 2.353 [sec] | 2.264 [sec] |  ↓3.8%  |
    | usecs/op   | 0.235374    | 0.226472    |  ↓3.8%  |
    | ops/sec    | 4,248,588   | 4,415,554   |  ↑3.9%  |

Small gains can be observed on x86 as well, though the generated code
optimizes for the work case, which is counterproductive for high
performance scenarios where such entry/exit work is usually avoided.

Avoid this by marking the work check in syscall_enter_from_user_mode_work()
unlikely, which is what the corresponding check in the exit path does
already.

[ tglx: Massage changelog and add the unlikely() ]

Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260128031934.3906955-14-ruanjinjie@huawei.com
include/linux/entry-common.h
kernel/entry/common.h [deleted file]
kernel/entry/syscall-common.c
kernel/entry/syscall_user_dispatch.c