new helper: restore_saved_sigmask()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 22 May 2012 03:33:55 +0000 (23:33 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 1 Jun 2012 16:58:47 +0000 (12:58 -0400)
first fruits of ..._restore_sigmask() helpers: now we can take
boilerplate "signal didn't have a handler, clear RESTORE_SIGMASK
and restore the blocked mask from ->saved_mask" into a common
helper.  Open-coded instances switched...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
32 files changed:
arch/alpha/kernel/signal.c
arch/arm/kernel/signal.c
arch/avr32/kernel/signal.c
arch/blackfin/kernel/signal.c
arch/c6x/kernel/signal.c
arch/cris/arch-v10/kernel/signal.c
arch/cris/arch-v32/kernel/signal.c
arch/frv/kernel/signal.c
arch/h8300/kernel/signal.c
arch/hexagon/kernel/signal.c
arch/ia64/kernel/signal.c
arch/m32r/kernel/signal.c
arch/m68k/kernel/signal.c
arch/microblaze/kernel/signal.c
arch/mips/kernel/signal.c
arch/mn10300/kernel/signal.c
arch/openrisc/kernel/signal.c
arch/parisc/kernel/signal.c
arch/powerpc/kernel/signal.c
arch/s390/kernel/signal.c
arch/score/kernel/signal.c
arch/sh/kernel/signal_32.c
arch/sh/kernel/signal_64.c
arch/sparc/kernel/signal32.c
arch/sparc/kernel/signal_32.c
arch/sparc/kernel/signal_64.c
arch/tile/kernel/signal.c
arch/um/kernel/signal.c
arch/unicore32/kernel/signal.c
arch/x86/kernel/signal.c
arch/xtensa/kernel/signal.c
include/linux/sched.h

index f6db3032ddf0b5b7283c4dd83b135062719e88db..cadf4571ca3136b49a6c6576bfa983a1fa650422 100644 (file)
@@ -572,9 +572,7 @@ do_signal(struct pt_regs * regs, struct switch_stack * sw,
        }
 
        /* If there's no signal to deliver, we just restore the saved mask.  */
-       if (test_and_clear_thread_flag(TIF_RESTORE_SIGMASK))
-               set_current_blocked(&current->saved_sigmask);
-
+       restore_saved_sigmask();
        if (single_stepping)
                ptrace_set_bpt(current);        /* re-set breakpoint */
 }
index 63f327dd519814b28a5c092b203e089ec4d732ea..3d1daac8ea04eddf4bdef9e48426a287388e318e 100644 (file)
@@ -663,11 +663,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
                        set_thread_flag(TIF_SYSCALL_RESTARTSYS);
        }
 
-       /* If there's no signal to deliver, we just put the saved sigmask
-        * back.
-        */
-       if (test_and_clear_thread_flag(TIF_RESTORE_SIGMASK))
-               set_current_blocked(&current->saved_sigmask);
+       restore_saved_sigmask();
 }
 
 asmlinkage void
index e7595ef74f51f76a1b86723569e47441b02cd4bc..8b12c304613775452ebb6cd4202c4964331981eb 100644 (file)
@@ -297,10 +297,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset, int syscall)
 
        if (signr == 0) {
                /* No signal to deliver -- put the saved sigmask back */
-               if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-                       clear_thread_flag(TIF_RESTORE_SIGMASK);
-                       sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-               }
+               restore_saved_sigmask();
                return 0;
        }
 
index fc9ecce8b6cee28d4352f1e3f06ddaac30682bcc..9d692a1277b32ca743800be5560c6dbd17b8c7f2 100644 (file)
@@ -319,10 +319,7 @@ asmlinkage void do_signal(struct pt_regs *regs)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index 9493f0bbf0a6f1b045dd18ee443fea83ca8b4aea..bfbcc958bbb4c0c4bcceff43e9e0b0bdadead57a 100644 (file)
@@ -343,10 +343,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index e16f8f297f61a0376f8b6b4497675a742ee9bf87..06885e94e4550be07e29deebf2d8e98c37678cda 100644 (file)
@@ -525,8 +525,5 @@ void do_signal(int canrestart, struct pt_regs *regs)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
index b338d8fc0c1241c12aa66495e474d16cd5d49f4a..fe12cdca0bacd416f833ad555751867f0e50277b 100644 (file)
@@ -560,10 +560,7 @@ do_signal(int canrestart, struct pt_regs *regs)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 asmlinkage void
index 595bf1e5a5dc0262bfc6897fb3b2999ab259fdc7..16351cc8c36c5ae7332b8a5af7b2747575e52100 100644 (file)
@@ -536,11 +536,7 @@ no_signal:
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
-
+       restore_saved_sigmask();
 } /* end do_signal() */
 
 /*****************************************************************************/
index e58992ad789ef0a0822f52616c03aec1126fa699..63623dabab32bf558e8cb79ec0d48654e9b79bbf 100644 (file)
@@ -501,8 +501,7 @@ statis void do_signal(struct pt_regs *regs)
        }
 
        /* If there's no signal to deliver, we just restore the saved mask.  */
-       if (test_and_clear_thread_flag(TIF_RESTORE_SIGMASK))
-               set_current_blocked(&current->saved_sigmask);
+       restore_saved_sigmask();
 }
 
 asmlinkage void do_notify_resume(struct pt_regs *regs, u32 thread_info_flags)
index 21a3018cb9bf78d9e480737ec87ccd885b2de422..acd6272913b31af5b9004a6098f49c13a70e1062 100644 (file)
@@ -259,10 +259,7 @@ no_signal:
 
 no_restart:
        /* If there's no signal to deliver, put the saved sigmask back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
index 7523501d3bc087bbb39a22573776ba365d131aeb..39d8f3afff495442cf4a28aa6236fceb7b64b422 100644 (file)
@@ -538,8 +538,5 @@ ia64_do_signal (struct sigscratch *scr, long in_syscall)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
index 64804f1f5141dcb2a82e21784cfb4598d803b0ef..2ad7c4587669a2c455fd8078aa884e7ad42850bb 100644 (file)
@@ -360,10 +360,7 @@ static void do_signal(struct pt_regs *regs)
                        prev_insn(regs);
                }
        }
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index 973eec60cad45527a872181e60d9c81d6630fa98..685cbe84f33f8b279345d8c0651d44085373053f 100644 (file)
@@ -1182,10 +1182,7 @@ static void do_signal(struct pt_regs *regs)
                handle_restart(regs, NULL, 0);
 
        /* If there's no signal to deliver, we just restore the saved mask.  */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs)
index 5d796e32786ea55bb9960e875b55d1e8c0757c3e..8e644dfaba4fe8bf808bf284029442fa0e0d1b4e 100644 (file)
@@ -381,10 +381,7 @@ static void do_signal(struct pt_regs *regs, int in_syscall)
         * If there's no signal to deliver, we just put the saved sigmask
         * back.
         */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs, int in_syscall)
index 8a6e6d116ab0399b2697d6a67660c23107229bf5..aad2d2da5eec29820a14893ae4d9323c9acd2cde 100644 (file)
@@ -614,10 +614,7 @@ static void do_signal(struct pt_regs *regs)
         * If there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index b8b6aa1a68379d7d563baa2263858ec640d0fa0f..b7994c38eacc5f8489717cb93e98c0197653cfcb 100644 (file)
@@ -525,10 +525,7 @@ static void do_signal(struct pt_regs *regs)
 
        /* if there's no signal to deliver, we just put the saved sigmask
         * back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index 9ae61152295348e7d5bc4e05e731884703d8018b..266c6fd2eb5c7aadd2e2021bbd36761175b2ce37 100644 (file)
@@ -339,11 +339,7 @@ void do_signal(struct pt_regs *regs)
        if (signr <= 0) {
                /* no signal to deliver so we just put the saved sigmask
                 * back */
-               if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-                       clear_thread_flag(TIF_RESTORE_SIGMASK);
-                       sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-               }
-
+               restore_saved_sigmask();
        } else {                /* signr > 0 */
                sigset_t *oldset;
 
index e7a7cd3e112009272fbe584de682d856e7e52ac5..277cacadf653d949d64297b586537321eb3738f6 100644 (file)
@@ -621,12 +621,7 @@ do_signal(struct pt_regs *regs, long in_syscall)
        DBG(1,"do_signal: Exit (not delivered), regs->gr[28] = %ld\n", 
                regs->gr[28]);
 
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
-
-       return;
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs, long in_syscall)
index bfc3ec1382fbf4edb3530857e21152d0539cd64b..0f4cc67f4268d578d9c0fdd65fa0f9fc1d0f3101 100644 (file)
@@ -132,12 +132,8 @@ static int do_signal(struct pt_regs *regs)
        check_syscall_restart(regs, &ka, signr > 0);
 
        if (signr <= 0) {
-               struct thread_info *ti = current_thread_info();
                /* No signal to deliver -- put the saved sigmask back */
-               if (ti->local_flags & _TLF_RESTORE_SIGMASK) {
-                       ti->local_flags &= ~_TLF_RESTORE_SIGMASK;
-                       sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-               }
+               restore_saved_sigmask();
                regs->trap = 0;
                return 0;               /* no signals delivered */
        }
index 42a6e8b47f06ca1ff8c7dd3009e63107f8dacead..37799089c38e70f1e514fc5e36c5d6cbf389f657 100644 (file)
@@ -484,10 +484,7 @@ void do_signal(struct pt_regs *regs)
        /*
         * If there's no signal to deliver, we just put the saved sigmask back.
         */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs)
index 302838d3acf6ce890e56a06b57e4a337421b1089..9e751559375b9248580b25ba7b0c194c73afb32e 100644 (file)
@@ -337,10 +337,7 @@ static void do_signal(struct pt_regs *regs)
         * If there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index 9d7bfd66f189c4024665e6f486aea1fded24b3d8..92f4173ad29a7997901bcae221f70da447dac4cf 100644 (file)
@@ -610,10 +610,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
         * If there's no signal to deliver, we just put the saved sigmask
         * back.
         */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 }
 
 asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0,
index aa6428430842a25399c06e7df21c4dd9ee0b9803..6e191ef0aa624fe4333dd03db0b00f97c90b4380 100644 (file)
@@ -143,12 +143,7 @@ static void do_signal(struct pt_regs *regs)
        }
 
        /* No signal to deliver -- put the saved sigmask back */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
-
-       return;
+       restore_saved_sigmask();
 }
 
 /*
index bb1513e45f1a811b05a07979995726b99eca1a94..88e0d8122d2c8f7f739944ee744e9624621b9847 100644 (file)
@@ -872,10 +872,7 @@ void do_signal32(sigset_t *oldset, struct pt_regs * regs)
        /* If there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               set_current_blocked(&current->saved_sigmask);
-       }
+       restore_saved_sigmask();
 }
 
 struct sigstack32 {
index 6b42e8622d1280a98f4bf8daee177f8328920d55..9dd97d2e171e3d5e1ba53f2ab5c3253828fe6ab0 100644 (file)
@@ -576,10 +576,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
        /* if there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               set_current_blocked(&current->saved_sigmask);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
index c82cf1cc39652e719469a6f291bd74a2e6b8bb33..55b820ee0ac9b6e02e22a24c3144affd390ede0d 100644 (file)
@@ -594,10 +594,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
        /* If there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               set_current_blocked(&current->saved_sigmask);
-       }
+       restore_saved_sigmask();
 }
 
 void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, unsigned long thread_info_flags)
index f79d4b88c747ae97db505a7f54143e610e37e24d..62b3493ea77d4f19679a05888eed7c8cb85399ac 100644 (file)
@@ -350,10 +350,7 @@ void do_signal(struct pt_regs *regs)
        }
 
        /* If there's no signal to deliver, just put the saved sigmask back. */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       restore_saved_sigmask();
 
 done:
        /* Avoid double syscall restart if there are nested signals. */
index 292e706016c521842b3654ea0e1de2619211dc60..6acf13c1740b5a49fc915d60f05b3d3d72bd4d0a 100644 (file)
@@ -130,10 +130,8 @@ static int kern_do_signal(struct pt_regs *regs)
         * if there's no signal to deliver, we just put the saved sigmask
         * back
         */
-       if (!handled_sig && test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
+       if (!handled_sig)
+               restore_saved_sigmask();
        return handled_sig;
 }
 
index 28782ad47b93ee5d778cfa225776f87cebbb5719..65a5ed3b6f2a437c3598a7c04af1647e614eceaa 100644 (file)
@@ -451,8 +451,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
        /* If there's no signal to deliver, we just put the saved
         * sigmask back.
         */
-       if (test_and_clear_thread_flag(TIF_RESTORE_SIGMASK))
-               set_current_blocked(&current->saved_sigmask);
+       restore_saved_sigmask();
 }
 
 asmlinkage void do_notify_resume(struct pt_regs *regs,
index 2e937a5ad53154b4ff3a047e181894ec1a44633e..25a4a81a51aa87b2058aad830e1dba2c09a5997e 100644 (file)
@@ -796,10 +796,7 @@ static void do_signal(struct pt_regs *regs)
         * If there's no signal to deliver, we just put the saved sigmask
         * back.
         */
-       if (current_thread_info()->status & TS_RESTORE_SIGMASK) {
-               current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
-               set_current_blocked(&current->saved_sigmask);
-       }
+       restore_saved_sigmask();
 }
 
 /*
index ea7e17778a75546d251b040e30819d26f8acbac3..8c4e751e3b832b161ef51bea3debeb3d9f28693f 100644 (file)
@@ -532,8 +532,7 @@ no_signal:
        }
 
        /* If there's no signal to deliver, we just restore the saved mask.  */
-       if (test_and_clear_thread_flag(TIF_RESTORE_SIGMASK))
-               set_current_blocked(&current->saved_sigmask);
+       restore_saved_sigmask();
 
        if (current->ptrace & PT_SINGLESTEP)
                task_pt_regs(current)->icountlevel = 1;
index 660c8ae93471cfb1a150936fda19e8f5a0945ef8..f1b46b88f6f52956c1a9266e24e89971acdb990d 100644 (file)
@@ -2207,6 +2207,12 @@ extern int send_sigqueue(struct sigqueue *,  struct task_struct *, int group);
 extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
 extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long);
 
+static inline void restore_saved_sigmask(void)
+{
+       if (test_and_clear_restore_sigmask())
+               set_current_blocked(&current->saved_sigmask);
+}
+
 static inline int kill_cad_pid(int sig, int priv)
 {
        return kill_pid(cad_pid, sig, priv);