powerpc/syscalls: signal_{32, 64} - switch to SYSCALL_DEFINE
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 May 2018 13:20:47 +0000 (23:20 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 10 May 2018 13:25:13 +0000 (23:25 +1000)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
[mpe: Fix sys_debug_setcontext() prototype to return long]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/asm-prototypes.h
arch/powerpc/kernel/signal.h
arch/powerpc/kernel/signal_32.c
arch/powerpc/kernel/signal_64.c

index 068760d..6f661e3 100644 (file)
@@ -80,18 +80,12 @@ void machine_check_exception(struct pt_regs *regs);
 void emulation_assist_interrupt(struct pt_regs *regs);
 
 /* signals, syscalls and interrupts */
-#ifdef CONFIG_PPC64
-int sys_swapcontext(struct ucontext __user *old_ctx,
-                   struct ucontext __user *new_ctx,
-                   long ctx_size, long r6, long r7, long r8, struct pt_regs *regs);
-#else
 long sys_swapcontext(struct ucontext __user *old_ctx,
                    struct ucontext __user *new_ctx,
-                   int ctx_size, int r6, int r7, int r8, struct pt_regs *regs);
-int sys_debug_setcontext(struct ucontext __user *ctx,
-                        int ndbg, struct sig_dbg_op __user *dbg,
-                        int r6, int r7, int r8,
-                        struct pt_regs *regs);
+                   long ctx_size);
+#ifdef CONFIG_PPC32
+long sys_debug_setcontext(struct ucontext __user *ctx,
+                         int ndbg, struct sig_dbg_op __user *dbg);
 int
 ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *tvp);
 unsigned long __init early_init(unsigned long dt_ptr);
index a6467f8..8004336 100644 (file)
@@ -49,10 +49,8 @@ extern int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
 
 #else /* CONFIG_PPC64 */
 
-extern long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
-                    struct pt_regs *regs);
-extern long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
-                      struct pt_regs *regs);
+extern long sys_rt_sigreturn(void);
+extern long sys_sigreturn(void);
 
 static inline int handle_rt_signal64(struct ksignal *ksig, sigset_t *set,
                                     struct task_struct *tsk)
index 492f034..9cf8a03 100644 (file)
@@ -26,8 +26,8 @@
 #include <linux/elf.h>
 #include <linux/ptrace.h>
 #include <linux/ratelimit.h>
-#ifdef CONFIG_PPC64
 #include <linux/syscalls.h>
+#ifdef CONFIG_PPC64
 #include <linux/compat.h>
 #else
 #include <linux/wait.h>
 
 
 #ifdef CONFIG_PPC64
-#define sys_rt_sigreturn       compat_sys_rt_sigreturn
-#define sys_swapcontext        compat_sys_swapcontext
-#define sys_sigreturn  compat_sys_sigreturn
-
 #define old_sigaction  old_sigaction32
 #define sigcontext     sigcontext32
 #define mcontext       mcontext32
@@ -1041,10 +1037,15 @@ static int do_setcontext_tm(struct ucontext __user *ucp,
 }
 #endif
 
-long sys_swapcontext(struct ucontext __user *old_ctx,
-                    struct ucontext __user *new_ctx,
-                    int ctx_size, int r6, int r7, int r8, struct pt_regs *regs)
+#ifdef CONFIG_PPC64
+COMPAT_SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
+                      struct ucontext __user *, new_ctx, int, ctx_size)
+#else
+SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
+                      struct ucontext __user *, new_ctx, long, ctx_size)
+#endif
 {
+       struct pt_regs *regs = current_pt_regs();
        unsigned char tmp __maybe_unused;
        int ctx_has_vsx_region = 0;
 
@@ -1132,10 +1133,14 @@ long sys_swapcontext(struct ucontext __user *old_ctx,
        return 0;
 }
 
-long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
-                    struct pt_regs *regs)
+#ifdef CONFIG_PPC64
+COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
+#else
+SYSCALL_DEFINE0(rt_sigreturn)
+#endif
 {
        struct rt_sigframe __user *rt_sf;
+       struct pt_regs *regs = current_pt_regs();
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
        struct ucontext __user *uc_transact;
        unsigned long msr_hi;
@@ -1224,11 +1229,10 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
 }
 
 #ifdef CONFIG_PPC32
-int sys_debug_setcontext(struct ucontext __user *ctx,
-                        int ndbg, struct sig_dbg_op __user *dbg,
-                        int r6, int r7, int r8,
-                        struct pt_regs *regs)
+SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
+                        int, ndbg, struct sig_dbg_op __user *, dbg)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct sig_dbg_op op;
        int i;
        unsigned char tmp __maybe_unused;
@@ -1419,9 +1423,13 @@ badframe:
 /*
  * Do a signal return; undo the signal stack.
  */
-long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
-                      struct pt_regs *regs)
+#ifdef CONFIG_PPC64
+COMPAT_SYSCALL_DEFINE0(sigreturn)
+#else
+SYSCALL_DEFINE0(sigreturn)
+#endif
 {
+       struct pt_regs *regs = current_pt_regs();
        struct sigframe __user *sf;
        struct sigcontext __user *sc;
        struct sigcontext sigctx;
index 7201176..83d51bf 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/elf.h>
 #include <linux/ptrace.h>
 #include <linux/ratelimit.h>
+#include <linux/syscalls.h>
 
 #include <asm/sigcontext.h>
 #include <asm/ucontext.h>
@@ -624,17 +625,14 @@ static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp)
 /*
  * Handle {get,set,swap}_context operations
  */
-int sys_swapcontext(struct ucontext __user *old_ctx,
-                   struct ucontext __user *new_ctx,
-                   long ctx_size, long r6, long r7, long r8, struct pt_regs *regs)
+SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
+               struct ucontext __user *, new_ctx, long, ctx_size)
 {
        unsigned char tmp;
        sigset_t set;
        unsigned long new_msr = 0;
        int ctx_has_vsx_region = 0;
 
-       BUG_ON(regs != current->thread.regs);
-
        if (new_ctx &&
            get_user(new_msr, &new_ctx->uc_mcontext.gp_regs[PT_MSR]))
                return -EFAULT;
@@ -698,18 +696,15 @@ int sys_swapcontext(struct ucontext __user *old_ctx,
  * Do a signal return; undo the signal stack.
  */
 
-int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
-                    unsigned long r6, unsigned long r7, unsigned long r8,
-                    struct pt_regs *regs)
+SYSCALL_DEFINE0(rt_sigreturn)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct ucontext __user *uc = (struct ucontext __user *)regs->gpr[1];
        sigset_t set;
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
        unsigned long msr;
 #endif
 
-       BUG_ON(current->thread.regs != regs);
-
        /* Always make any pending restarted system calls return -EINTR */
        current->restart_block.fn = do_no_restart_syscall;