Messages in this thread | | | Date | Mon, 14 Jul 2008 16:05:40 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: current linux-2.6.git: cpusets completely broken |
| |
On Tue, 15 Jul 2008, Dmitry Adamushko wrote: > > cpu_clear(cpu, cpu_active_map); _alone_ does not guarantee that after > its completion, no new tasks can appear on (be migrated to) 'cpu'.
But I think we should make it do that.
I do realize that we "queue" processes, but that's part of the whole complexity. More importantly, the people who do that kind of asynchronous queueing don't even really care - *if* they cared about the process _having_ to show up on the destination core, they'd be waiting synchronously and re-trying (which they do).
So by doing the test for cpu_active_map not at queuing time, but at the time when we actually try to do the migration, we can now also make that cpu_active_map be totally serialized.
(Of course, anybody who clears the bit does need to take the runqueue lock of that CPU too, but cpu_down() will have to do that as it does the "migrate away live tasks" anyway, so that's not a problem)
Linus
| |