Re: [PATCH v16 02/18] syscall_user_dispatch: Introduce a weak fallback for arch_syscall_is_vdso_sigreturn()
Mukesh Kumar Chaurasiya <[email protected]> Fri, 3 Jul 2026 16:43:11 +0530
| Newsgroups | org.kernel.vger.linux-alpha,dev.linux.lists.loongarch,org.infradead.lists.linux-riscv,org.infradead.lists.linux-um,org.kernel.vger.linux-csky,org.kernel.vger.linux-kernel,org.kernel.vger.linux-m68k,org.kernel.vger.linux-mips,org.kernel.vger.linux-parisc,org.kernel.vger.linux-s390,org.kernel.vger.linux-sh,org.kvack.linux-mm,org.ozlabs.lists.linuxppc-dev |
|---|---|
| Message-ID | <[email protected]> |
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]>