Re: [PATCH v16 02/18] syscall_user_dispatch: Introduce a weak fallback for arch_syscall_is_vdso_sigreturn()
From: Mukesh Kumar Chaurasiya <hidden>
Date: 2026-07-03 11:13:41
Also in:
linux-alpha, linux-m68k, linux-mips, linux-mm, linux-riscv, linux-s390, linux-sh, linux-um, lkml, loongarch
On Mon, Jun 29, 2026 at 09:06:00PM +0800, Jinjie Ruan wrote:
quoted hunk ↗ jump to hunk
Currently, multiple architectures (LoongArch, RISC-V, S390, Powerpc) provide identical stubs for arch_syscall_is_vdso_sigreturn() that simply return false. This results in redundant boilerplate code across the tree. Introduce a default __weak implementation of arch_syscall_is_vdso_sigreturn() directly in syscall_user_dispatch.c that returns false. This allows architectures that do not utilize a vDSO sigreturn to entirely drop their redundant inline definitions. Architectures requiring a specialized check (such as x86) will continue to override this fallback with their strong symbol definitions. Clean up the redundant implementations in loongarch, riscv, s390 and powerpc. Cc: Thomas Gleixner <tglx@kernel.org> Signed-off-by: Jinjie Ruan <redacted> --- arch/loongarch/include/asm/syscall.h | 5 ----- arch/powerpc/include/asm/syscall.h | 5 ----- arch/riscv/include/asm/syscall.h | 5 ----- arch/s390/include/asm/syscall.h | 5 ----- include/linux/syscall_user_dispatch.h | 1 + kernel/entry/syscall_user_dispatch.c | 5 +++++ 6 files changed, 6 insertions(+), 20 deletions(-)diff --git a/arch/loongarch/include/asm/syscall.h b/arch/loongarch/include/asm/syscall.h index df8ea223c77b..946886794ced 100644 --- a/arch/loongarch/include/asm/syscall.h +++ b/arch/loongarch/include/asm/syscall.h@@ -85,9 +85,4 @@ static inline int syscall_get_arch(struct task_struct *task) #endif } -static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) -{ - return false; -} - #endif /* __ASM_LOONGARCH_SYSCALL_H */diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h index 834fcc4f7b54..4b3c52ed6e9d 100644 --- a/arch/powerpc/include/asm/syscall.h +++ b/arch/powerpc/include/asm/syscall.h@@ -139,9 +139,4 @@ static inline int syscall_get_arch(struct task_struct *task) else return AUDIT_ARCH_PPC64; } - -static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) -{ - return false; -} #endif /* _ASM_SYSCALL_H */diff --git a/arch/riscv/include/asm/syscall.h b/arch/riscv/include/asm/syscall.h index 8067e666a4ca..987c9a78806f 100644 --- a/arch/riscv/include/asm/syscall.h +++ b/arch/riscv/include/asm/syscall.h@@ -112,11 +112,6 @@ static inline void syscall_handler(struct pt_regs *regs, ulong syscall) regs->a0 = fn(regs); } -static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) -{ - return false; -} - asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t); asmlinkage long sys_riscv_hwprobe(struct riscv_hwprobe *, size_t, size_t,diff --git a/arch/s390/include/asm/syscall.h b/arch/s390/include/asm/syscall.h index 4271e4169f45..5f310caad1fc 100644 --- a/arch/s390/include/asm/syscall.h +++ b/arch/s390/include/asm/syscall.h@@ -89,11 +89,6 @@ static inline int syscall_get_arch(struct task_struct *task) return AUDIT_ARCH_S390X; } -static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) -{ - return false; -} - #define SYSCALL_FMT_0 #define SYSCALL_FMT_1 , "0" (r2) #define SYSCALL_FMT_2 , "d" (r3) SYSCALL_FMT_1diff --git a/include/linux/syscall_user_dispatch.h b/include/linux/syscall_user_dispatch.h index 3858a6ffdd5c..73d69e02807d 100644 --- a/include/linux/syscall_user_dispatch.h +++ b/include/linux/syscall_user_dispatch.h@@ -10,6 +10,7 @@ #ifdef CONFIG_GENERIC_ENTRY +bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs); int set_syscall_user_dispatch(unsigned long mode, unsigned long offset, unsigned long len, char __user *selector);diff --git a/kernel/entry/syscall_user_dispatch.c b/kernel/entry/syscall_user_dispatch.c index d89dffcc2d64..acf545774d37 100644 --- a/kernel/entry/syscall_user_dispatch.c +++ b/kernel/entry/syscall_user_dispatch.c@@ -32,6 +32,11 @@ static void trigger_sigsys(struct pt_regs *regs) force_sig_info(&info); } +bool __weak arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) +{ + return false; +} + bool syscall_user_dispatch(struct pt_regs *regs) { struct syscall_user_dispatch *sd = ¤t->syscall_dispatch;-- 2.34.1
Build and boot tested on ppc with P11 LPAR. LGTM. Tested-by: Mukesh Kumar Chaurasiya (IBM) <redacted> Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <redacted>