[PATCH 20/44] sh: Use get_signal() signal_setup_done()

2014-03-02 Thread Richard Weinberger
Use the more generic functions get_signal() signal_setup_done()
for signal delivery.

Signed-off-by: Richard Weinberger 
---
 arch/sh/kernel/signal_32.c | 79 ++--
 arch/sh/kernel/signal_64.c | 82 ++
 2 files changed, 64 insertions(+), 97 deletions(-)

diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c
index 6af6e7c..2ee67c5 100644
--- a/arch/sh/kernel/signal_32.c
+++ b/arch/sh/kernel/signal_32.c
@@ -266,17 +266,17 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, 
size_t frame_size)
 extern void __kernel_sigreturn(void);
 extern void __kernel_rt_sigreturn(void);
 
-static int setup_frame(int sig, struct k_sigaction *ka,
-   sigset_t *set, struct pt_regs *regs)
+static int setup_frame(struct ksignal *ksig, sigset_t *set,
+  struct pt_regs *regs)
 {
struct sigframe __user *frame;
-   int err = 0;
+   int err = 0, sig = ksig->sig;
int signal;
 
-   frame = get_sigframe(ka, regs->regs[15], sizeof(*frame));
+   frame = get_sigframe(>ka, regs->regs[15], sizeof(*frame));
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   goto give_sigsegv;
+   return -EFAULT;
 
signal = current_thread_info()->exec_domain
&& current_thread_info()->exec_domain->signal_invmap
@@ -292,8 +292,8 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 
/* Set up to return from userspace.  If provided, use a stub
   already in userspace.  */
-   if (ka->sa.sa_flags & SA_RESTORER) {
-   regs->pr = (unsigned long) ka->sa.sa_restorer;
+   if (ksig->ka.sa.sa_flags & SA_RESTORER) {
+   regs->pr = (unsigned long) ksig->ka.sa.sa_restorer;
 #ifdef CONFIG_VSYSCALL
} else if (likely(current->mm->context.vdso)) {
regs->pr = VDSO_SYM(&__kernel_sigreturn);
@@ -313,7 +313,7 @@ static int setup_frame(int sig, struct k_sigaction *ka,
}
 
if (err)
-   goto give_sigsegv;
+   return -EFAULT;
 
/* Set up registers for signal handler */
regs->regs[15] = (unsigned long) frame;
@@ -323,15 +323,15 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 
if (current->personality & FDPIC_FUNCPTRS) {
struct fdpic_func_descriptor __user *funcptr =
-   (struct fdpic_func_descriptor __user 
*)ka->sa.sa_handler;
+   (struct fdpic_func_descriptor __user 
*)ksig->ka.sa.sa_handler;
 
err |= __get_user(regs->pc, >text);
err |= __get_user(regs->regs[12], >GOT);
} else
-   regs->pc = (unsigned long)ka->sa.sa_handler;
+   regs->pc = (unsigned long)ksig->ka.sa.sa_handler;
 
if (err)
-   goto give_sigsegv;
+   return -EFAULT;
 
set_fs(USER_DS);
 
@@ -339,23 +339,19 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 current->comm, task_pid_nr(current), frame, regs->pc, 
regs->pr);
 
return 0;
-
-give_sigsegv:
-   force_sigsegv(sig, current);
-   return -EFAULT;
 }
 
-static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
-  sigset_t *set, struct pt_regs *regs)
+static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
+ struct pt_regs *regs)
 {
struct rt_sigframe __user *frame;
-   int err = 0;
+   int err = 0, sig = ksig->sig;
int signal;
 
-   frame = get_sigframe(ka, regs->regs[15], sizeof(*frame));
+   frame = get_sigframe(>ka, regs->regs[15], sizeof(*frame));
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   goto give_sigsegv;
+   return -EFAULT;
 
signal = current_thread_info()->exec_domain
&& current_thread_info()->exec_domain->signal_invmap
@@ -363,7 +359,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, 
siginfo_t *info,
? current_thread_info()->exec_domain->signal_invmap[sig]
: sig;
 
-   err |= copy_siginfo_to_user(>info, info);
+   err |= copy_siginfo_to_user(>info, >info);
 
/* Create the ucontext.  */
err |= __put_user(0, >uc.uc_flags);
@@ -375,8 +371,8 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, 
siginfo_t *info,
 
/* Set up to return from userspace.  If provided, use a stub
   already in userspace.  */
-   if (ka->sa.sa_flags & SA_RESTORER) {
-   regs->pr = (unsigned long) ka->sa.sa_restorer;
+   if (ksig->ka.sa.sa_flags & SA_RESTORER) {
+   regs->pr = (unsigned long) ksig->ka.sa.sa_restorer;
 #ifdef CONFIG_VSYSCALL
} else if (likely(current->mm->context.vdso)) {
regs->pr = VDSO_SYM(&__kernel_rt_sigreturn);
@@ -396,7 +392,7 @@ static int setup_rt_frame(int 

[PATCH 20/44] sh: Use get_signal() signal_setup_done()

2014-03-02 Thread Richard Weinberger
Use the more generic functions get_signal() signal_setup_done()
for signal delivery.

Signed-off-by: Richard Weinberger rich...@nod.at
---
 arch/sh/kernel/signal_32.c | 79 ++--
 arch/sh/kernel/signal_64.c | 82 ++
 2 files changed, 64 insertions(+), 97 deletions(-)

diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c
index 6af6e7c..2ee67c5 100644
--- a/arch/sh/kernel/signal_32.c
+++ b/arch/sh/kernel/signal_32.c
@@ -266,17 +266,17 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, 
size_t frame_size)
 extern void __kernel_sigreturn(void);
 extern void __kernel_rt_sigreturn(void);
 
-static int setup_frame(int sig, struct k_sigaction *ka,
-   sigset_t *set, struct pt_regs *regs)
+static int setup_frame(struct ksignal *ksig, sigset_t *set,
+  struct pt_regs *regs)
 {
struct sigframe __user *frame;
-   int err = 0;
+   int err = 0, sig = ksig-sig;
int signal;
 
-   frame = get_sigframe(ka, regs-regs[15], sizeof(*frame));
+   frame = get_sigframe(ksig-ka, regs-regs[15], sizeof(*frame));
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   goto give_sigsegv;
+   return -EFAULT;
 
signal = current_thread_info()-exec_domain
 current_thread_info()-exec_domain-signal_invmap
@@ -292,8 +292,8 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 
/* Set up to return from userspace.  If provided, use a stub
   already in userspace.  */
-   if (ka-sa.sa_flags  SA_RESTORER) {
-   regs-pr = (unsigned long) ka-sa.sa_restorer;
+   if (ksig-ka.sa.sa_flags  SA_RESTORER) {
+   regs-pr = (unsigned long) ksig-ka.sa.sa_restorer;
 #ifdef CONFIG_VSYSCALL
} else if (likely(current-mm-context.vdso)) {
regs-pr = VDSO_SYM(__kernel_sigreturn);
@@ -313,7 +313,7 @@ static int setup_frame(int sig, struct k_sigaction *ka,
}
 
if (err)
-   goto give_sigsegv;
+   return -EFAULT;
 
/* Set up registers for signal handler */
regs-regs[15] = (unsigned long) frame;
@@ -323,15 +323,15 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 
if (current-personality  FDPIC_FUNCPTRS) {
struct fdpic_func_descriptor __user *funcptr =
-   (struct fdpic_func_descriptor __user 
*)ka-sa.sa_handler;
+   (struct fdpic_func_descriptor __user 
*)ksig-ka.sa.sa_handler;
 
err |= __get_user(regs-pc, funcptr-text);
err |= __get_user(regs-regs[12], funcptr-GOT);
} else
-   regs-pc = (unsigned long)ka-sa.sa_handler;
+   regs-pc = (unsigned long)ksig-ka.sa.sa_handler;
 
if (err)
-   goto give_sigsegv;
+   return -EFAULT;
 
set_fs(USER_DS);
 
@@ -339,23 +339,19 @@ static int setup_frame(int sig, struct k_sigaction *ka,
 current-comm, task_pid_nr(current), frame, regs-pc, 
regs-pr);
 
return 0;
-
-give_sigsegv:
-   force_sigsegv(sig, current);
-   return -EFAULT;
 }
 
-static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
-  sigset_t *set, struct pt_regs *regs)
+static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
+ struct pt_regs *regs)
 {
struct rt_sigframe __user *frame;
-   int err = 0;
+   int err = 0, sig = ksig-sig;
int signal;
 
-   frame = get_sigframe(ka, regs-regs[15], sizeof(*frame));
+   frame = get_sigframe(ksig-ka, regs-regs[15], sizeof(*frame));
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   goto give_sigsegv;
+   return -EFAULT;
 
signal = current_thread_info()-exec_domain
 current_thread_info()-exec_domain-signal_invmap
@@ -363,7 +359,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, 
siginfo_t *info,
? current_thread_info()-exec_domain-signal_invmap[sig]
: sig;
 
-   err |= copy_siginfo_to_user(frame-info, info);
+   err |= copy_siginfo_to_user(frame-info, ksig-info);
 
/* Create the ucontext.  */
err |= __put_user(0, frame-uc.uc_flags);
@@ -375,8 +371,8 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, 
siginfo_t *info,
 
/* Set up to return from userspace.  If provided, use a stub
   already in userspace.  */
-   if (ka-sa.sa_flags  SA_RESTORER) {
-   regs-pr = (unsigned long) ka-sa.sa_restorer;
+   if (ksig-ka.sa.sa_flags  SA_RESTORER) {
+   regs-pr = (unsigned long) ksig-ka.sa.sa_restorer;
 #ifdef CONFIG_VSYSCALL
} else if (likely(current-mm-context.vdso)) {
regs-pr = VDSO_SYM(__kernel_rt_sigreturn);
@@ -396,7 +392,7 @@ static int setup_rt_frame(int