[PATCH 09/44] ia64: 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.
This inverts also the return codes of force_sigsegv_info()
and setup_frame() to follow the kernel convention.

Signed-off-by: Richard Weinberger 
---
 arch/ia64/kernel/signal.c | 46 +-
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c
index 33cab9a..6d92170 100644
--- a/arch/ia64/kernel/signal.c
+++ b/arch/ia64/kernel/signal.c
@@ -309,12 +309,11 @@ force_sigsegv_info (int sig, void __user *addr)
si.si_uid = from_kuid_munged(current_user_ns(), current_uid());
si.si_addr = addr;
force_sig_info(SIGSEGV, , current);
-   return 0;
+   return 1;
 }
 
 static long
-setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
-struct sigscratch *scr)
+setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
 {
extern char __kernel_sigtramp[];
unsigned long tramp_addr, new_rbs = 0, new_sp;
@@ -323,7 +322,7 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 
new_sp = scr->pt.r12;
tramp_addr = (unsigned long) __kernel_sigtramp;
-   if (ka->sa.sa_flags & SA_ONSTACK) {
+   if (ksig->ka.sa.sa_flags & SA_ONSTACK) {
int onstack = sas_ss_flags(new_sp);
 
if (onstack == 0) {
@@ -347,29 +346,29 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 */
check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN;
if (!likely(on_sig_stack(check_sp)))
-   return force_sigsegv_info(sig, (void __user *)
+   return force_sigsegv_info(ksig->sig, (void 
__user *)
  check_sp);
}
}
frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   return force_sigsegv_info(sig, frame);
+   return force_sigsegv_info(ksig->sig, frame);
 
-   err  = __put_user(sig, >arg0);
+   err  = __put_user(ksig->sig, >arg0);
err |= __put_user(>info, >arg1);
err |= __put_user(>sc, >arg2);
err |= __put_user(new_rbs, >sc.sc_rbs_base);
err |= __put_user(0, >sc.sc_loadrs); /* initialize to zero */
-   err |= __put_user(ka->sa.sa_handler, >handler);
+   err |= __put_user(ksig->ka.sa.sa_handler, >handler);
 
-   err |= copy_siginfo_to_user(>info, info);
+   err |= copy_siginfo_to_user(>info, >info);
 
err |= __save_altstack(>sc.sc_stack, scr->pt.r12);
err |= setup_sigcontext(>sc, set, scr);
 
if (unlikely(err))
-   return force_sigsegv_info(sig, frame);
+   return force_sigsegv_info(ksig->sig, frame);
 
scr->pt.r12 = (unsigned long) frame - 16;   /* new stack pointer */
scr->pt.ar_fpsr = FPSR_DEFAULT; /* reset fpsr for 
signal handler */
@@ -394,22 +393,20 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 
 #if DEBUG_SIG
printk("SIG deliver (%s:%d): sig=%d sp=%lx ip=%lx handler=%p\n",
-  current->comm, current->pid, sig, scr->pt.r12, frame->sc.sc_ip, 
frame->handler);
+  current->comm, current->pid, ksig->sig, scr->pt.r12, 
frame->sc.sc_ip, frame->handler);
 #endif
-   return 1;
+   return 0;
 }
 
 static long
-handle_signal (unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
-  struct sigscratch *scr)
+handle_signal (struct ksignal *ksig, struct sigscratch *scr)
 {
-   if (!setup_frame(sig, ka, info, sigmask_to_save(), scr))
-   return 0;
+   int ret = setup_frame(ksig, sigmask_to_save(), scr);
 
-   signal_delivered(sig, info, ka, >pt,
-test_thread_flag(TIF_SINGLESTEP));
+   if (!ret)
+   signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP));
 
-   return 1;
+   return ret;
 }
 
 /*
@@ -419,17 +416,16 @@ handle_signal (unsigned long sig, struct k_sigaction *ka, 
siginfo_t *info,
 void
 ia64_do_signal (struct sigscratch *scr, long in_syscall)
 {
-   struct k_sigaction ka;
-   siginfo_t info;
long restart = in_syscall;
long errno = scr->pt.r8;
+   struct ksignal ksig;
 
/*
 * This only loops in the rare cases of handle_signal() failing, in 
which case we
 * need to push through a forced SIGSEGV.
 */
while (1) {
-   int signr = get_signal_to_deliver(, , >pt, NULL);
+   get_signal();
 
/*
 * get_signal_to_deliver() may have run a debugger (via 
notify_parent())
@@ -446,7 +442,7 @@ ia64_do_signal (struct sigscratch *scr, 

[PATCH 09/44] ia64: 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.
This inverts also the return codes of force_sigsegv_info()
and setup_frame() to follow the kernel convention.

Signed-off-by: Richard Weinberger rich...@nod.at
---
 arch/ia64/kernel/signal.c | 46 +-
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c
index 33cab9a..6d92170 100644
--- a/arch/ia64/kernel/signal.c
+++ b/arch/ia64/kernel/signal.c
@@ -309,12 +309,11 @@ force_sigsegv_info (int sig, void __user *addr)
si.si_uid = from_kuid_munged(current_user_ns(), current_uid());
si.si_addr = addr;
force_sig_info(SIGSEGV, si, current);
-   return 0;
+   return 1;
 }
 
 static long
-setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
-struct sigscratch *scr)
+setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
 {
extern char __kernel_sigtramp[];
unsigned long tramp_addr, new_rbs = 0, new_sp;
@@ -323,7 +322,7 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 
new_sp = scr-pt.r12;
tramp_addr = (unsigned long) __kernel_sigtramp;
-   if (ka-sa.sa_flags  SA_ONSTACK) {
+   if (ksig-ka.sa.sa_flags  SA_ONSTACK) {
int onstack = sas_ss_flags(new_sp);
 
if (onstack == 0) {
@@ -347,29 +346,29 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 */
check_sp = (new_sp - sizeof(*frame))  -STACK_ALIGN;
if (!likely(on_sig_stack(check_sp)))
-   return force_sigsegv_info(sig, (void __user *)
+   return force_sigsegv_info(ksig-sig, (void 
__user *)
  check_sp);
}
}
frame = (void __user *) ((new_sp - sizeof(*frame))  -STACK_ALIGN);
 
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
-   return force_sigsegv_info(sig, frame);
+   return force_sigsegv_info(ksig-sig, frame);
 
-   err  = __put_user(sig, frame-arg0);
+   err  = __put_user(ksig-sig, frame-arg0);
err |= __put_user(frame-info, frame-arg1);
err |= __put_user(frame-sc, frame-arg2);
err |= __put_user(new_rbs, frame-sc.sc_rbs_base);
err |= __put_user(0, frame-sc.sc_loadrs); /* initialize to zero */
-   err |= __put_user(ka-sa.sa_handler, frame-handler);
+   err |= __put_user(ksig-ka.sa.sa_handler, frame-handler);
 
-   err |= copy_siginfo_to_user(frame-info, info);
+   err |= copy_siginfo_to_user(frame-info, ksig-info);
 
err |= __save_altstack(frame-sc.sc_stack, scr-pt.r12);
err |= setup_sigcontext(frame-sc, set, scr);
 
if (unlikely(err))
-   return force_sigsegv_info(sig, frame);
+   return force_sigsegv_info(ksig-sig, frame);
 
scr-pt.r12 = (unsigned long) frame - 16;   /* new stack pointer */
scr-pt.ar_fpsr = FPSR_DEFAULT; /* reset fpsr for 
signal handler */
@@ -394,22 +393,20 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t 
*info, sigset_t *set,
 
 #if DEBUG_SIG
printk(SIG deliver (%s:%d): sig=%d sp=%lx ip=%lx handler=%p\n,
-  current-comm, current-pid, sig, scr-pt.r12, frame-sc.sc_ip, 
frame-handler);
+  current-comm, current-pid, ksig-sig, scr-pt.r12, 
frame-sc.sc_ip, frame-handler);
 #endif
-   return 1;
+   return 0;
 }
 
 static long
-handle_signal (unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
-  struct sigscratch *scr)
+handle_signal (struct ksignal *ksig, struct sigscratch *scr)
 {
-   if (!setup_frame(sig, ka, info, sigmask_to_save(), scr))
-   return 0;
+   int ret = setup_frame(ksig, sigmask_to_save(), scr);
 
-   signal_delivered(sig, info, ka, scr-pt,
-test_thread_flag(TIF_SINGLESTEP));
+   if (!ret)
+   signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP));
 
-   return 1;
+   return ret;
 }
 
 /*
@@ -419,17 +416,16 @@ handle_signal (unsigned long sig, struct k_sigaction *ka, 
siginfo_t *info,
 void
 ia64_do_signal (struct sigscratch *scr, long in_syscall)
 {
-   struct k_sigaction ka;
-   siginfo_t info;
long restart = in_syscall;
long errno = scr-pt.r8;
+   struct ksignal ksig;
 
/*
 * This only loops in the rare cases of handle_signal() failing, in 
which case we
 * need to push through a forced SIGSEGV.
 */
while (1) {
-   int signr = get_signal_to_deliver(info, ka, scr-pt, NULL);
+   get_signal(ksig);
 
/*
 * get_signal_to_deliver() may have run a debugger (via