From 3e3511b3c8a5ff68ef7cd3dee8ac9dd9cfe4b2aa Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 19 Mar 2018 20:48:50 -0400 Subject: sparc: get rid of sys_sparc_pipe() wrappers just use current_pt_regs() Signed-off-by: Al Viro --- arch/sparc/kernel/sys_sparc_64.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'arch/sparc/kernel/sys_sparc_64.c') diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index 55416db482ad..c8d759ef783c 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -310,7 +310,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) * sys_pipe() is the normal C calling standard for creating * a pipe. It's not the way unix traditionally does this, though. */ -SYSCALL_DEFINE1(sparc_pipe_real, struct pt_regs *, regs) +SYSCALL_DEFINE0(sparc_pipe) { int fd[2]; int error; @@ -318,7 +318,7 @@ SYSCALL_DEFINE1(sparc_pipe_real, struct pt_regs *, regs) error = do_pipe_flags(fd, 0); if (error) goto out; - regs->u_regs[UREG_I1] = fd[1]; + current_pt_regs()->u_regs[UREG_I1] = fd[1]; error = fd[0]; out: return error; -- cgit v1.2.3-59-g8ed1b From b925c46c81104d170719b58e10f4375299109b8a Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 19 Mar 2018 23:08:21 -0400 Subject: sparc: bury a zombie extern that had been that way for twenty years Back in January 1998, in 2.1.79 check_pending() got taken out and shot. Users in arch/sparc and arch/sparc64 got converted away from it. One of the externs (in arch/sparc) was taken out at the same time. Two other (in arch/sparc64/kernel/sys_sparc{,32}.c) got stuck. The one in sys_sparc32.c was quietly removed 6 years later by an unrelated commit. The last one kept shambling until now. It's time to end that depravity, let's bury the body... Signed-off-by: Al Viro --- arch/sparc/kernel/sys_sparc_64.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'arch/sparc/kernel/sys_sparc_64.c') diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index c8d759ef783c..180c536602bd 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -523,8 +523,6 @@ asmlinkage void sparc_breakpoint(struct pt_regs *regs) exception_exit(prev_state); } -extern void check_pending(int signum); - SYSCALL_DEFINE2(getdomainname, char __user *, name, int, len) { int nlen, err; -- cgit v1.2.3-59-g8ed1b From ee076e81fc14ca79334d02970cea66604f183a14 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 19 Mar 2018 23:23:53 -0400 Subject: sparc: trivial conversions to {COMPAT_,}SYSCALL_DEFINE() Signed-off-by: Al Viro --- arch/sparc/kernel/sys_sparc32.c | 22 +++++++++++----------- arch/sparc/kernel/sys_sparc_32.c | 16 ++++++++-------- arch/sparc/kernel/sys_sparc_64.c | 4 ++-- arch/sparc/kernel/systbls.h | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) (limited to 'arch/sparc/kernel/sys_sparc_64.c') diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c index 9b0c569267bf..d01b99258de2 100644 --- a/arch/sparc/kernel/sys_sparc32.c +++ b/arch/sparc/kernel/sys_sparc32.c @@ -98,8 +98,8 @@ static int cp_compat_stat64(struct kstat *stat, return err; } -asmlinkage long compat_sys_stat64(const char __user * filename, - struct compat_stat64 __user *statbuf) +COMPAT_SYSCALL_DEFINE2(stat64, const char __user *, filename, + struct compat_stat64 __user *, statbuf) { struct kstat stat; int error = vfs_stat(filename, &stat); @@ -109,8 +109,8 @@ asmlinkage long compat_sys_stat64(const char __user * filename, return error; } -asmlinkage long compat_sys_lstat64(const char __user * filename, - struct compat_stat64 __user *statbuf) +COMPAT_SYSCALL_DEFINE2(lstat64, const char __user *, filename, + struct compat_stat64 __user *, statbuf) { struct kstat stat; int error = vfs_lstat(filename, &stat); @@ -120,8 +120,8 @@ asmlinkage long compat_sys_lstat64(const char __user * filename, return error; } -asmlinkage long compat_sys_fstat64(unsigned int fd, - struct compat_stat64 __user * statbuf) +COMPAT_SYSCALL_DEFINE2(fstat64, unsigned int, fd, + struct compat_stat64 __user *, statbuf) { struct kstat stat; int error = vfs_fstat(fd, &stat); @@ -131,9 +131,9 @@ asmlinkage long compat_sys_fstat64(unsigned int fd, return error; } -asmlinkage long compat_sys_fstatat64(unsigned int dfd, - const char __user *filename, - struct compat_stat64 __user * statbuf, int flag) +COMPAT_SYSCALL_DEFINE4(fstatat64, unsigned int, dfd, + const char __user *, filename, + struct compat_stat64 __user *, statbuf, int, flag) { struct kstat stat; int error; @@ -241,8 +241,8 @@ long sys32_sync_file_range(unsigned int fd, unsigned long off_high, unsigned lon flags); } -asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, - u32 lenhi, u32 lenlo) +COMPAT_SYSCALL_DEFINE6(fallocate, int, fd, int, mode, u32, offhi, u32, offlo, + u32, lenhi, u32, lenlo) { return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, ((loff_t)lenhi << 32) | lenlo); diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index c47e9423a25c..e7d326af76d6 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c @@ -34,7 +34,7 @@ /* XXX Make this per-binary type, this way we can detect the type of * XXX a binary. Every Sparc executable calls this very early on. */ -asmlinkage unsigned long sys_getpagesize(void) +SYSCALL_DEFINE0(getpagesize) { return PAGE_SIZE; /* Possibly older binaries want 8192 on sun4's? */ } @@ -98,9 +98,9 @@ int sparc_mmap_check(unsigned long addr, unsigned long len) /* Linux version of mmap */ -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, unsigned long fd, - unsigned long pgoff) +SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, + unsigned long, prot, unsigned long, flags, unsigned long, fd, + unsigned long, pgoff) { /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE we have. */ @@ -108,9 +108,9 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, pgoff >> (PAGE_SHIFT - 12)); } -asmlinkage long sys_mmap(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, unsigned long fd, - unsigned long off) +SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len, + unsigned long, prot, unsigned long, flags, unsigned long, fd, + unsigned long, off) { /* no alignment check? */ return sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); @@ -202,7 +202,7 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, return ret; } -asmlinkage long sys_getdomainname(char __user *name, int len) +SYSCALL_DEFINE2(getdomainname, char __user *, name, int, len) { int nlen, err; diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index 180c536602bd..c15765539f65 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -39,7 +39,7 @@ /* #define DEBUG_UNIMP_SYSCALL */ -asmlinkage unsigned long sys_getpagesize(void) +SYSCALL_DEFINE0(getpagesize) { return PAGE_SIZE; } @@ -642,7 +642,7 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act, return ret; } -asmlinkage long sys_kern_features(void) +SYSCALL_DEFINE0(kern_features) { return KERN_FEATURE_MIXED_MODE_STACK; } diff --git a/arch/sparc/kernel/systbls.h b/arch/sparc/kernel/systbls.h index 4aca08e3ddef..432aa84ad009 100644 --- a/arch/sparc/kernel/systbls.h +++ b/arch/sparc/kernel/systbls.h @@ -9,7 +9,7 @@ #include -asmlinkage unsigned long sys_getpagesize(void); +asmlinkage long sys_getpagesize(void); asmlinkage long sys_sparc_pipe(void); asmlinkage unsigned long c_sys_nis_syscall(struct pt_regs *regs); asmlinkage long sys_getdomainname(char __user *name, int len); -- cgit v1.2.3-59-g8ed1b From 6de7617e8892666073a9a8f6ba7e2f7882f4cadc Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 19 Mar 2018 23:26:39 -0400 Subject: sparc: get rid of memory_ordering(2) wrapper use current_pt_regs() in it instead Signed-off-by: Al Viro --- arch/sparc/kernel/sys_sparc_64.c | 4 ++-- arch/sparc/kernel/syscalls.S | 3 --- arch/sparc/kernel/systbls.h | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) (limited to 'arch/sparc/kernel/sys_sparc_64.c') diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index c15765539f65..b929414fa9f2 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -606,9 +606,9 @@ SYSCALL_DEFINE5(utrap_install, utrap_entry_t, type, return 0; } -asmlinkage long sparc_memory_ordering(unsigned long model, - struct pt_regs *regs) +SYSCALL_DEFINE1(memory_ordering, unsigned long, model) { + struct pt_regs *regs = current_pt_regs(); if (model >= 3) return -EINVAL; regs->tstate = (regs->tstate & ~TSTATE_MM) | (model << 14); diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S index f4c8fa7a4b35..d7d86b95011a 100644 --- a/arch/sparc/kernel/syscalls.S +++ b/arch/sparc/kernel/syscalls.S @@ -30,9 +30,6 @@ sys32_execveat: sys_nis_syscall: ba,pt %xcc, c_sys_nis_syscall add %sp, PTREGS_OFF, %o0 -sys_memory_ordering: - ba,pt %xcc, sparc_memory_ordering - add %sp, PTREGS_OFF, %o1 #ifdef CONFIG_COMPAT sys32_sigstack: ba,pt %xcc, do_sys32_sigstack diff --git a/arch/sparc/kernel/systbls.h b/arch/sparc/kernel/systbls.h index 432aa84ad009..3352dbac9d55 100644 --- a/arch/sparc/kernel/systbls.h +++ b/arch/sparc/kernel/systbls.h @@ -46,8 +46,7 @@ asmlinkage long sys_utrap_install(utrap_entry_t type, utrap_handler_t new_d, utrap_handler_t __user *old_p, utrap_handler_t __user *old_d); -asmlinkage long sparc_memory_ordering(unsigned long model, - struct pt_regs *regs); +asmlinkage long sys_memory_ordering(unsigned long model); asmlinkage void sparc64_set_context(struct pt_regs *regs); asmlinkage void sparc64_get_context(struct pt_regs *regs); asmlinkage long sys32_truncate64(const char __user * path, -- cgit v1.2.3-59-g8ed1b From 47db69752b22de2ac315d094fd09fac31b0d3bfc Mon Sep 17 00:00:00 2001 From: Al Viro Date: Tue, 20 Mar 2018 10:44:21 -0400 Subject: sparc: get rid of asm wrapper for nis_syscall() just use current_pt_regs() Signed-off-by: Al Viro --- arch/sparc/kernel/entry.S | 7 ------- arch/sparc/kernel/sys_sparc_32.c | 5 ++--- arch/sparc/kernel/sys_sparc_64.c | 4 ++-- arch/sparc/kernel/syscalls.S | 3 --- arch/sparc/kernel/systbls.h | 2 +- 5 files changed, 5 insertions(+), 16 deletions(-) (limited to 'arch/sparc/kernel/sys_sparc_64.c') diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index b47917939bc5..4d3696973325 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -801,13 +801,6 @@ SUN_PI_(lda [%l4] ASI_M_MMUREGS, %l5) ! read sfsr last RESTORE_ALL .align 4 - .globl sys_nis_syscall -sys_nis_syscall: - mov %o7, %l5 - add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg - call c_sys_nis_syscall - mov %l5, %o7 - sunos_execv: .globl sunos_execv b sys_execve diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index a927be4a51e7..a5df89743e06 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c @@ -127,11 +127,10 @@ SYSCALL_DEFINE5(sparc_remap_file_pages, unsigned long, start, unsigned long, siz (pgoff >> (PAGE_SHIFT - 12)), flags); } -/* we come to here via sys_nis_syscall so it can setup the regs argument */ -asmlinkage unsigned long -c_sys_nis_syscall (struct pt_regs *regs) +SYSCALL_DEFINE0(nis_syscall) { static int count = 0; + struct pt_regs *regs = current_pt_regs(); if (count++ > 5) return -ENOSYS; diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index b929414fa9f2..c66a396d7afe 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -480,10 +480,10 @@ SYSCALL_DEFINE5(64_mremap, unsigned long, addr, unsigned long, old_len, return sys_mremap(addr, old_len, new_len, flags, new_addr); } -/* we come to here via sys_nis_syscall so it can setup the regs argument */ -asmlinkage unsigned long c_sys_nis_syscall(struct pt_regs *regs) +SYSCALL_DEFINE0(nis_syscall) { static int count; + struct pt_regs *regs = current_pt_regs(); /* Don't make the system unusable, if someone goes stuck */ if (count++ > 5) diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S index d7d86b95011a..db42b4fb3708 100644 --- a/arch/sparc/kernel/syscalls.S +++ b/arch/sparc/kernel/syscalls.S @@ -27,9 +27,6 @@ sys32_execveat: #endif .align 32 -sys_nis_syscall: - ba,pt %xcc, c_sys_nis_syscall - add %sp, PTREGS_OFF, %o0 #ifdef CONFIG_COMPAT sys32_sigstack: ba,pt %xcc, do_sys32_sigstack diff --git a/arch/sparc/kernel/systbls.h b/arch/sparc/kernel/systbls.h index 1cb02fa28e9c..bf014267d619 100644 --- a/arch/sparc/kernel/systbls.h +++ b/arch/sparc/kernel/systbls.h @@ -11,7 +11,7 @@ asmlinkage long sys_getpagesize(void); asmlinkage long sys_sparc_pipe(void); -asmlinkage unsigned long c_sys_nis_syscall(struct pt_regs *regs); +asmlinkage long sys_nis_syscall(void); asmlinkage long sys_getdomainname(char __user *name, int len); void do_rt_sigreturn(struct pt_regs *regs); asmlinkage long sys_mmap(unsigned long addr, unsigned long len, -- cgit v1.2.3-59-g8ed1b