Re: [BUG] "sched: Remove rq->lock from the first half of ttwu()"locks up on ARM

From: Santosh Shilimkar
Date: Fri May 27 2011 - 11:23:23 EST


Peter,

On 5/26/2011 10:53 PM, Peter Zijlstra wrote:
On Thu, 2011-05-26 at 19:17 +0200, Peter Zijlstra wrote:
On 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.

Are you planning send version of this patch for stable .39
too ?

Regards
Santosh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/