On Thu, 2011-05-26 at 19:17 +0200, Peter Zijlstra wrote:Are you planning send version of this patch for stable .39On Thu, 2011-05-26 at 19:04 +0200, Oleg Nesterov wrote:On 05/26, Peter Zijlstra wrote:
@@ -2636,7 +2636,8 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
* to spin on ->on_cpu if p is current, since that would
* deadlock.
*/
- if (p == current) {
+ if (cpu == smp_processor_id()) {
+ p->sched_contributes_to_load = 0;
ttwu_queue(p, cpu);
Btw. I do not pretend I really understand se->vruntime, but in this
case we are doing enqueue_task() without ->task_waking(), however we
pass ENQUEUE_WAKING. Is it correct?
No its not, that's the thing that I got wrong the first time and caused
these pauses.
We'd end up with something like the below, which isn't too different
from what I've now got queued.
It has the extra cpu == smp_processor_id() check, but I'm not sure this
whole case is worth the trouble. I could go stick some counters in to
verify how often all this happens I guess.