aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2008-04-30 03:53:07 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 11:29:37 -0400
commit7648d961fcb454d38e864d2d850bc30e078bf7e6 (patch)
tree9a101ba3ffb61d6083654fabc05accedb3d4ef07
parent4e4c22c71144c1b2e22c257ec6cf08ccb5be1165 (diff)
signals: set_restore_sigmask TIF_SIGPENDING
Set TIF_SIGPENDING in set_restore_sigmask. This lets arch code take TIF_RESTORE_SIGMASK out of the set of bits that will be noticed on return to user mode. On some machines those bits are scarce, and we can free this unneeded one up for other uses. It is probably the case that TIF_SIGPENDING is always set anyway everywhere set_restore_sigmask() is used. But this is some cheap paranoia in case there is an arcane case where it might not be. Signed-off-by: Roland McGrath <roland@redhat.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: "Luck, Tony" <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/thread_info.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
index 43d8162c696..81c5f82f066 100644
--- a/include/linux/thread_info.h
+++ b/include/linux/thread_info.h
@@ -97,11 +97,17 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag)
97 * set_restore_sigmask() - make sure saved_sigmask processing gets done 97 * set_restore_sigmask() - make sure saved_sigmask processing gets done
98 * 98 *
99 * This sets TIF_RESTORE_SIGMASK and ensures that the arch signal code 99 * This sets TIF_RESTORE_SIGMASK and ensures that the arch signal code
100 * will run before returning to user mode, to process the flag. 100 * will run before returning to user mode, to process the flag. For
101 * all callers, TIF_SIGPENDING is already set or it's no harm to set
102 * it. TIF_RESTORE_SIGMASK need not be in the set of bits that the
103 * arch code will notice on return to user mode, in case those bits
104 * are scarce. We set TIF_SIGPENDING here to ensure that the arch
105 * signal code always gets run when TIF_RESTORE_SIGMASK is set.
101 */ 106 */
102static inline void set_restore_sigmask(void) 107static inline void set_restore_sigmask(void)
103{ 108{
104 set_thread_flag(TIF_RESTORE_SIGMASK); 109 set_thread_flag(TIF_RESTORE_SIGMASK);
110 set_thread_flag(TIF_SIGPENDING);
105} 111}
106#endif /* TIF_RESTORE_SIGMASK */ 112#endif /* TIF_RESTORE_SIGMASK */
107 113