Re: [RFC PATCH v2 5/5] powerpc/syscalls: Allow none instead of sys_ni_syscall
From: Arnd Bergmann <arnd@arndb.de>
Date: 2019-01-16 14:30:34
On Wed, Jan 16, 2019 at 2:27 PM Michael Ellerman [off-list ref] wrote:
sys_ni_syscall is the "not-implemented" syscall syscall, which just returns -ENOSYS. But unless you know that it's not obvious what it does, and even if you do know what it means it doesn't stand out that well from other real syscalls. So teach the scripts to treat "none" as a synonym for "sys_ni_syscall". This makes the table more readable.
Hmm, this actually breaks the proposed script to find bugs in the compat handling, i.e. detecting those that have no compat handler but only a native one.
quoted hunk ↗ jump to hunk
diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl index c5907a2dbc86..988a7e29245f 100644 --- a/arch/powerpc/kernel/syscalls/syscall.tbl +++ b/arch/powerpc/kernel/syscalls/syscall.tbl@@ -24,28 +24,28 @@ 14 common mknod sys_mknod 15 common chmod sys_chmod 16 common lchown sys_lchown -17 common break sys_ni_syscall -18 32 oldstat sys_stat sys_ni_syscall -18 64 oldstat sys_ni_syscall +17 common break none +18 32 oldstat sys_stat none +18 64 oldstat none
The '64 oldstat' line can simply get dropped here, it has no value (I failed to notice this earlier). For break, i.e. a syscall number without any implementation, we use a different syntax on x86 (leaving out the sys_* entirely), and on s390 (using '-', which is visually better than 'none' IMHO). We might also just remove those entirely across all architectures. Some have already done this, and some have done it partially. I can only see a couple of syscalls that got removed in the entire git history (set_zone_reclaim, nfsservctl, vm86, timerfd), any other ones are now literally pre-historic, and presumably nobody would miss the macros when building a program that has no chance to run on any kernel since at least 2.6.12. For 32-bit oldstat, I'd argue that this should actually get fixed by adding the compat syscall logic. I think this was discussed when Firoz first posted his patches. Something like this:
diff --git a/arch/powerpc/include/asm/unistd.hb/arch/powerpc/include/asm/unistd.h index f44dbc65e38e..d954c2fc4e2f 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h@@ -41,9 +41,7 @@ #define __ARCH_WANT_SYS_OLDUMOUNT #define __ARCH_WANT_SYS_SIGPENDING #define __ARCH_WANT_SYS_SIGPROCMASK -#ifdef CONFIG_PPC32 #define __ARCH_WANT_OLD_STAT -#endif #ifdef CONFIG_PPC64 #define __ARCH_WANT_SYS_TIME #define __ARCH_WANT_SYS_UTIME
diff --git a/arch/powerpc/include/uapi/asm/stat.hb/arch/powerpc/include/uapi/asm/stat.h index afd25f2ff4e8..8331b350c12b 100644
--- a/arch/powerpc/include/uapi/asm/stat.h
+++ b/arch/powerpc/include/uapi/asm/stat.h@@ -11,7 +11,7 @@ #define STAT_HAVE_NSEC 1 -#ifndef __powerpc64__ +#if defined(__KERNEL__) || !defined(__powerpc64__) struct __old_kernel_stat { unsigned short st_dev; unsigned short st_ino;
@@ -25,7 +25,7 @@ struct __old_kernel_stat { unsigned long st_mtime; unsigned long st_ctime; }; -#endif /* !__powerpc64__ */ +#endif /* __KERNEL__ || !__powerpc64__ */ struct stat { unsigned long st_dev;
diff --git a/arch/powerpc/kernel/syscalls/syscall.tblb/arch/powerpc/kernel/syscalls/syscall.tbl index 740dc9dbf689..cd85718c7039 100644
--- a/arch/powerpc/kernel/syscalls/syscall.tbl
+++ b/arch/powerpc/kernel/syscalls/syscall.tbl@@ -27,7 +27,7 @@ 15 common chmod sys_chmod 16 common lchown sys_lchown 17 common break sys_ni_syscall -18 32 oldstat sys_stat sys_ni_syscall +18 32 oldstat sys_stat 18 64 oldstat sys_ni_syscall 18 spu oldstat sys_ni_syscall 19 common lseek sys_lseek compat_sys_lseek
@@ -43,7 +43,7 @@ 25 spu stime sys_stime 26 nospu ptrace sys_ptrace compat_sys_ptrace 27 common alarm sys_alarm -28 32 oldfstat sys_fstat sys_ni_syscall +28 32 oldfstat sys_fstat 28 64 oldfstat sys_ni_syscall 28 spu oldfstat sys_ni_syscall 29 nospu pause sys_pause
@@ -114,7 +114,7 @@ 82 64 select sys_ni_syscall 82 spu select sys_ni_syscall 83 common symlink sys_symlink -84 32 oldlstat sys_lstat sys_ni_syscall +84 32 oldlstat sys_lstat 84 64 oldlstat sys_ni_syscall 84 spu oldlstat sys_ni_syscall 85 common readlink sys_readlink