Remove the redundant nested conditional check within the system call exit path of el0_svc_common() to streamline the exit sequence. When entering this fast-path block, CONFIG_DEBUG_RSEQ is guaranteed to be disabled so the call of rseq_syscall() is a no-op. Under this constraint, the code logic inside the block becomes completely identical to what the arm64_syscall_exit_to_user_mode_work() helper already does. Replace that nested logic with a direct invocation of the helper, eliminating redundant code. Before: | if (... && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) { | flags = read_thread_flags(); | if (unlikely(flags & _TIF_SYSCALL_EXIT_WORK) || flags & _TIF_SINGLESTEP) | arm64_syscall_exit_to_user_mode_work(regs); | return; | } | trace_exit: | arm64_syscall_exit_to_user_mode_work(regs); After simplify: | if (... && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) { | arm64_syscall_exit_to_user_mode_work(regs); | return; | } | trace_exit: | arm64_syscall_exit_to_user_mode_work(regs); Furthermore, Since both the conditional fast-path and the fallback slow-path now uniformly invoke arm64_syscall_exit_to_user_mode_work(), this explicit conditional branch is entirely redundant regardless of whether the evaluation is true or false. Removing it collapses the duplicated logic into a single, unconditional path. No functional changes. Cc: Mark Rutland Cc: Will Deacon Cc: Catalin Marinas Cc: Ada Couprie Diaz Signed-off-by: Jinjie Ruan --- arch/arm64/kernel/syscall.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index a8e0bf8d362e..3488afd45d20 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -114,19 +114,6 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr, } invoke_syscall(regs, scno, sc_nr, syscall_table); - - /* - * The tracing status may have changed under our feet, so we have to - * check again. However, if we were tracing entry, then we always trace - * exit regardless, as the old entry assembly did. - */ - if (!(unlikely(flags & _TIF_SYSCALL_WORK)) && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) { - flags = read_thread_flags(); - if (unlikely(flags & _TIF_SYSCALL_EXIT_WORK) || flags & _TIF_SINGLESTEP) - arm64_syscall_exit_to_user_mode_work(regs); - return; - } - trace_exit: arm64_syscall_exit_to_user_mode_work(regs); } -- 2.34.1