On Mon, Jun 29, 2026 at 09:06:00PM +0800, Jinjie Ruan wrote: > 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 <[email protected]> > Signed-off-by: Jinjie Ruan <[email protected]> > --- > 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_1 > diff --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) <[email protected]> Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
