Rip out get_signal_to_deliver()
authorRichard Weinberger <richard@nod.at>
Mon, 7 Oct 2013 13:26:57 +0000 (15:26 +0200)
committerRichard Weinberger <richard@sigma-star.at>
Wed, 6 Aug 2014 11:03:44 +0000 (13:03 +0200)
Now we can turn get_signal() to the main function.

Signed-off-by: Richard Weinberger <richard@nod.at>
include/linux/signal.h
kernel/signal.c

index b005cc3dc1dcae6bfa58c7320ac058e32c4e22cd..750196fcc0a5144aebb1df7f67102502c871a990 100644 (file)
@@ -280,7 +280,7 @@ struct ksignal {
        int sig;
 };
 
-extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
+extern int get_signal(struct ksignal *ksig);
 extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping);
 extern void exit_signals(struct task_struct *tsk);
 extern void kernel_sigaction(int, __sighandler_t);
@@ -300,18 +300,6 @@ static inline void disallow_signal(int sig)
        kernel_sigaction(sig, SIG_IGN);
 }
 
-/*
- * Eventually that'll replace get_signal_to_deliver(); macro for now,
- * to avoid nastiness with include order.
- */
-#define get_signal(ksig)                                       \
-({                                                             \
-       struct ksignal *p = (ksig);                             \
-       p->sig = get_signal_to_deliver(&p->info, &p->ka,        \
-                                       signal_pt_regs(), NULL);\
-       p->sig > 0;                                             \
-})
-
 extern struct kmem_cache *sighand_cachep;
 
 int unhandled_signal(struct task_struct *tsk, int sig);
index 0d75cf875d44312e832973fb5cc70faa817aa6a0..5c60200403882f011ce64c2476f6a8d0f78af3dd 100644 (file)
@@ -2166,8 +2166,7 @@ static int ptrace_signal(int signr, siginfo_t *info)
        return signr;
 }
 
-int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
-                         struct pt_regs *regs, void *cookie)
+int get_signal(struct ksignal *ksig)
 {
        struct sighand_struct *sighand = current->sighand;
        struct signal_struct *signal = current->signal;
@@ -2237,13 +2236,13 @@ relock:
                        goto relock;
                }
 
-               signr = dequeue_signal(current, &current->blocked, info);
+               signr = dequeue_signal(current, &current->blocked, &ksig->info);
 
                if (!signr)
                        break; /* will return 0 */
 
                if (unlikely(current->ptrace) && signr != SIGKILL) {
-                       signr = ptrace_signal(signr, info);
+                       signr = ptrace_signal(signr, &ksig->info);
                        if (!signr)
                                continue;
                }
@@ -2251,13 +2250,13 @@ relock:
                ka = &sighand->action[signr-1];
 
                /* Trace actually delivered signals. */
-               trace_signal_deliver(signr, info, ka);
+               trace_signal_deliver(signr, &ksig->info, ka);
 
                if (ka->sa.sa_handler == SIG_IGN) /* Do nothing.  */
                        continue;
                if (ka->sa.sa_handler != SIG_DFL) {
                        /* Run the handler.  */
-                       *return_ka = *ka;
+                       ksig->ka = *ka;
 
                        if (ka->sa.sa_flags & SA_ONESHOT)
                                ka->sa.sa_handler = SIG_DFL;
@@ -2307,7 +2306,7 @@ relock:
                                spin_lock_irq(&sighand->siglock);
                        }
 
-                       if (likely(do_signal_stop(info->si_signo))) {
+                       if (likely(do_signal_stop(ksig->info.si_signo))) {
                                /* It released the siglock.  */
                                goto relock;
                        }
@@ -2328,7 +2327,7 @@ relock:
 
                if (sig_kernel_coredump(signr)) {
                        if (print_fatal_signals)
-                               print_fatal_signal(info->si_signo);
+                               print_fatal_signal(ksig->info.si_signo);
                        proc_coredump_connector(current);
                        /*
                         * If it was able to dump core, this kills all
@@ -2338,17 +2337,19 @@ relock:
                         * first and our do_group_exit call below will use
                         * that value and ignore the one we pass it.
                         */
-                       do_coredump(info);
+                       do_coredump(&ksig->info);
                }
 
                /*
                 * Death signals, no core dump.
                 */
-               do_group_exit(info->si_signo);
+               do_group_exit(ksig->info.si_signo);
                /* NOTREACHED */
        }
        spin_unlock_irq(&sighand->siglock);
-       return signr;
+
+       ksig->sig = signr;
+       return ksig->sig > 0;
 }
 
 /**