Messages in this thread Patch in this message | | | Date | Tue, 1 Jul 2008 08:19:13 -0700 | From | Greg KH <> | Subject | [patch 6/9] sched: fix cpu hotplug |
| |
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------
From: Dmitry Adamushko <dmitry.adamushko@gmail.com>
Commit 79c537998d143b127c8c662a403c3356cb885f1c upstream
the CPU hotplug problems (crashes under high-volume unplug+replug tests) seem to be related to migrate_dead_tasks().
Firstly I added traces to see all tasks being migrated with migrate_live_tasks() and migrate_dead_tasks(). On my setup the problem pops up (the one with "se == NULL" in the loop of pick_next_task_fair()) shortly after the traces indicate that some has been migrated with migrate_dead_tasks()). btw., I can reproduce it much faster now with just a plain cpu down/up loop.
[disclaimer] Well, unless I'm really missing something important in this late hour [/desclaimer] pick_next_task() is not something appropriate for migrate_dead_tasks() :-)
the following change seems to eliminate the problem on my setup (although, I kept it running only for a few minutes to get a few messages indicating migrate_dead_tasks() does move tasks and the system is still ok)
Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- kernel/sched.c | 1 + 1 file changed, 1 insertion(+)
--- a/kernel/sched.c +++ b/kernel/sched.c @@ -5728,6 +5728,7 @@ static void migrate_dead_tasks(unsigned next = pick_next_task(rq, rq->curr); if (!next) break; + next->sched_class->put_prev_task(rq, next); migrate_dead(dead_cpu, next); } --
| |