diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 9a1ddb84e26d..29e2ec0bd831 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -1921,11 +1921,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) | |||
1921 | running = task_running(rq, p); | 1921 | running = task_running(rq, p); |
1922 | on_rq = p->se.on_rq; | 1922 | on_rq = p->se.on_rq; |
1923 | ncsw = 0; | 1923 | ncsw = 0; |
1924 | if (!match_state || p->state == match_state) { | 1924 | if (!match_state || p->state == match_state) |
1925 | ncsw = p->nivcsw + p->nvcsw; | 1925 | ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ |
1926 | if (unlikely(!ncsw)) | ||
1927 | ncsw = 1; | ||
1928 | } | ||
1929 | task_rq_unlock(rq, &flags); | 1926 | task_rq_unlock(rq, &flags); |
1930 | 1927 | ||
1931 | /* | 1928 | /* |
@@ -4599,10 +4596,7 @@ do_wait_for_common(struct completion *x, long timeout, int state) | |||
4599 | wait.flags |= WQ_FLAG_EXCLUSIVE; | 4596 | wait.flags |= WQ_FLAG_EXCLUSIVE; |
4600 | __add_wait_queue_tail(&x->wait, &wait); | 4597 | __add_wait_queue_tail(&x->wait, &wait); |
4601 | do { | 4598 | do { |
4602 | if ((state == TASK_INTERRUPTIBLE && | 4599 | if (signal_pending_state(state, current)) { |
4603 | signal_pending(current)) || | ||
4604 | (state == TASK_KILLABLE && | ||
4605 | fatal_signal_pending(current))) { | ||
4606 | timeout = -ERESTARTSYS; | 4600 | timeout = -ERESTARTSYS; |
4607 | break; | 4601 | break; |
4608 | } | 4602 | } |