Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
sched: refactor wait_for_completion_timeout()
sched: fix wait_for_completion_timeout() spurious failure under heavy load
sched: rt: dont stop the period timer when there are tasks wanting to run

+8 -9
+6 -8
kernel/sched.c
··· 4398 4398 signal_pending(current)) || 4399 4399 (state == TASK_KILLABLE && 4400 4400 fatal_signal_pending(current))) { 4401 - __remove_wait_queue(&x->wait, &wait); 4402 - return -ERESTARTSYS; 4401 + timeout = -ERESTARTSYS; 4402 + break; 4403 4403 } 4404 4404 __set_current_state(state); 4405 4405 spin_unlock_irq(&x->wait.lock); 4406 4406 timeout = schedule_timeout(timeout); 4407 4407 spin_lock_irq(&x->wait.lock); 4408 - if (!timeout) { 4409 - __remove_wait_queue(&x->wait, &wait); 4410 - return timeout; 4411 - } 4412 - } while (!x->done); 4408 + } while (!x->done && timeout); 4413 4409 __remove_wait_queue(&x->wait, &wait); 4410 + if (!x->done) 4411 + return timeout; 4414 4412 } 4415 4413 x->done--; 4416 - return timeout; 4414 + return timeout ?: 1; 4417 4415 } 4418 4416 4419 4417 static long __sched
+2 -1
kernel/sched_rt.c
··· 250 250 if (rt_rq->rt_time || rt_rq->rt_nr_running) 251 251 idle = 0; 252 252 spin_unlock(&rt_rq->rt_runtime_lock); 253 - } 253 + } else if (rt_rq->rt_nr_running) 254 + idle = 0; 254 255 255 256 if (enqueue) 256 257 sched_rt_rq_enqueue(rt_rq);