diff options
author | Tejun Heo <tj@kernel.org> | 2011-11-23 12:28:17 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2011-11-23 12:28:17 -0500 |
commit | 34b087e48367c252e343c2f8de65676a78af1e4a (patch) | |
tree | fbe94bad0a3073c6f4231752fba99c6bc8702277 /include/linux/sched.h | |
parent | adfa543e7314b36ac55a40019977de6e47946dd7 (diff) |
freezer: kill unused set_freezable_with_signal()
There's no in-kernel user of set_freezable_with_signal() left. Mixing
TIF_SIGPENDING with kernel threads can lead to nasty corner cases as
kernel threads never travel signal delivery path on their own.
e.g. the current implementation is buggy in the cancelation path of
__thaw_task(). It calls recalc_sigpending_and_wake() in an attempt to
clear TIF_SIGPENDING but the function never clears it regardless of
sigpending state. This means that signallable freezable kthreads may
continue executing with !freezing() && stuck TIF_SIGPENDING, which can
be troublesome.
This patch removes set_freezable_with_signal() along with
PF_FREEZER_NOSIG and recalc_sigpending*() calls in freezer. User
tasks get TIF_SIGPENDING, kernel tasks get woken up and the spurious
sigpending is dealt with in the usual signal delivery path.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r-- | include/linux/sched.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index d12bd03b688f..2f90470ad843 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1788,7 +1788,6 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t * | |||
1788 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ | 1788 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ |
1789 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ | 1789 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ |
1790 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ | 1790 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */ |
1791 | #define PF_FREEZER_NOSIG 0x80000000 /* Freezer won't send signals to it */ | ||
1792 | 1791 | ||
1793 | /* | 1792 | /* |
1794 | * Only the _current_ task can read/write to tsk->flags, but other | 1793 | * Only the _current_ task can read/write to tsk->flags, but other |