diff options
| author | Dmitry Adamushko <[email protected]> | 2008-07-30 12:34:04 +0200 |
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2008-08-11 16:32:41 +0200 |
| commit | 279ef6bbb8308488398c8f33b04c760148428378 (patch) | |
| tree | bc2b925ce5ed3f943d57a2adc99324cf308712e7 /arch/m32r/kernel/sys_m32r.c | |
| parent | 77ae651347bdd46830da8b28b1efc5e4a9d7cbd0 (diff) | |
sched, cpu hotplug: fix set_cpus_allowed() use in hotplug callbacks
Mark Langsdorf reported:
> One of my co-workers noticed that the powernow-k8
> driver no longer restarts when a CPU core is
> hot-disabled and then hot-enabled on AMD quad-core
> systems.
>
> The following comands work fine on 2.6.26 and fail
> on 2.6.27-rc1:
>
> echo 0 > /sys/devices/system/cpu/cpu3/online
> echo 1 > /sys/devices/system/cpu/cpu3/online
> find /sys -name cpufreq
>
> For 2.6.26, the find will return a cpufreq
> directory for each processor. In 2.6.27-rc1,
> the cpu3 directory is missing.
>
> After digging through the code, the following
> logic is failing when the core is hot-enabled
> at runtime. The code works during the boot
> sequence.
>
> cpumask_t = current->cpus_allowed;
> set_cpus_allowed_ptr(current, &cpumask_of_cpu(cpu));
> if (smp_processor_id() != cpu)
> return -ENODEV;
So set the CPU active before calling the CPU_ONLINE notifier chain,
there are a handful of notifiers that use set_cpus_allowed().
This fix also solves the problem with x86-microcode. I've sent
alternative patches for microcode, but as this "rely on
set_cpus_allowed_ptr() being workable in cpu-hotplug(CPU_ONLINE, ...)"
assumption seems to be more broad than what we thought, perhaps this fix
should be applied.
With this patch we define that by the moment CPU_ONLINE is being sent,
a 'cpu' is online and ready for tasks to be migrated onto it.
Signed-off-by: Dmitry Adamushko <[email protected]>
Reported-by: Mark Langsdorf <[email protected]>
Tested-by: Mark Langsdorf <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'arch/m32r/kernel/sys_m32r.c')
0 files changed, 0 insertions, 0 deletions