diff options
-rw-r--r-- | kernel/sched.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index e717047be5cf..4f13d379bea5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -3481,9 +3481,13 @@ need_resched_nonpreemptible: | |||
3481 | 3481 | ||
3482 | schedule_debug(prev); | 3482 | schedule_debug(prev); |
3483 | 3483 | ||
3484 | spin_lock_irq(&rq->lock); | 3484 | /* |
3485 | clear_tsk_need_resched(prev); | 3485 | * Do the rq-clock update outside the rq lock: |
3486 | */ | ||
3487 | local_irq_disable(); | ||
3486 | __update_rq_clock(rq); | 3488 | __update_rq_clock(rq); |
3489 | spin_lock(&rq->lock); | ||
3490 | clear_tsk_need_resched(prev); | ||
3487 | 3491 | ||
3488 | if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) { | 3492 | if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) { |
3489 | if (unlikely((prev->state & TASK_INTERRUPTIBLE) && | 3493 | if (unlikely((prev->state & TASK_INTERRUPTIBLE) && |