Messages in this thread Patch in this message | | | Subject | [2.6.16-rc6 patch] smp fix for recalc_task_prio() | From | Mike Galbraith <> | Date | Sat, 18 Mar 2006 05:37:17 +0100 |
| |
Greetings,
The patchlet below fixes an smp buglet where a task goes to sleep on one cpu and wakes up on another, causing recalc_task_prio() to be called with now < p->timestamp.
If this isn't 2.6.16 material, and I can respin against mm.
-Mike
--- linux-2.6.16-rc6/kernel/sched.c.org 2006-03-17 14:48:35.000000000 +0100 +++ linux-2.6.16-rc6/kernel/sched.c 2006-03-18 05:22:21.000000000 +0100 @@ -685,6 +685,16 @@ unsigned long long __sleep_time = now - p->timestamp; unsigned long sleep_time; + /* + * On SMP systems, a task can go to sleep on one CPU and + * wake up on another. When this happens, the timestamp + * is rounded to the nearest tick, which can lead to now + * being less than p->timestamp for short sleeps. Ignore + * these, they're insignificant. + */ + if (unlikely(now < p->timestamp)) + __sleep_time = 0ULL; + if (unlikely(p->policy == SCHED_BATCH)) sleep_time = 0; else {
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |