|
@@ -3481,9 +3481,13 @@ need_resched_nonpreemptible:
|
|
|
|
|
|
schedule_debug(prev);
|
|
schedule_debug(prev);
|
|
|
|
|
|
- spin_lock_irq(&rq->lock);
|
|
|
|
- clear_tsk_need_resched(prev);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Do the rq-clock update outside the rq lock:
|
|
|
|
+ */
|
|
|
|
+ local_irq_disable();
|
|
__update_rq_clock(rq);
|
|
__update_rq_clock(rq);
|
|
|
|
+ spin_lock(&rq->lock);
|
|
|
|
+ clear_tsk_need_resched(prev);
|
|
|
|
|
|
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
|
|
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
|
|
if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
|
|
if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
|