linux/arch/x86/kernel/cpu/cpufreq
Linus Torvalds ea34f43a07 acpi-cpufreq: fix 'smp_call_function_many()' confusion
It turns out that 'smp_call_function_many()' doesn't work at all like
'smp_call_function_single()', and my change to Andrew's patch to use it
rather than a loop over all CPU's acpi-cpufreq doesn't work.

My bad.

'smp_call_function_many()' has two "features" (aka "documented bugs"):

 (a) it needs to be called with preemption disabled, because it uses
     smp_processor_id() without guarding the CPU lookup with 'get_cpu()'
     and 'put_cpu()' like the 'single' variant does.

 (b) even if the current CPU is part of the CPU mask, it won't do the
     call on that CPU.

Still, we're better off trying to use 'smp_call_function_many()' than
looping over CPU's, since it at least in theory allows us to use a
broadcast IPI and do it all in parallel.  So let's just work around the
silly semantic bugs in that function.

Reported-and-tested-by: Ali Gholami Rudi <ali@rudi.ir>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Dave Jones <davej@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-04-15 08:41:16 -07:00
..
acpi-cpufreq.c acpi-cpufreq: fix 'smp_call_function_many()' confusion 2009-04-15 08:41:16 -07:00
cpufreq-nforce2.c [CPUFREQ] Make cpufreq-nforce2 less obnoxious 2009-02-24 22:47:32 -05:00
e_powersaver.c Merge branch 'core/percpu' into percpu-cpumask-x86-for-linus-2 2009-03-27 17:28:43 +01:00
elanfreq.c [CPUFREQ] checkpatch cleanups for elanfreq 2009-02-24 22:47:28 -05:00
gx-suspmod.c [CPUFREQ] checkpatch cleanups for gx-suspmod 2009-02-24 22:47:29 -05:00
Kconfig [CPUFREQ] powernow-k8: Always compile powernow-k8 driver with ACPI support 2009-02-24 22:47:31 -05:00
longhaul.c ACPI: cpufreq: remove dupilcated #include 2009-04-07 01:39:14 -04:00
longhaul.h [CPUFREQ] checkpatch cleanups for longhaul 2009-02-24 22:47:29 -05:00
longrun.c [CPUFREQ] checkpatch cleanups for longrun 2009-02-24 22:47:29 -05:00
Makefile [CPUFREQ] Change link order of x86 cpufreq modules 2009-02-24 22:47:32 -05:00
p4-clockmod.c Merge branch 'linus' into cpumask-for-linus 2009-03-30 23:53:32 +02:00
powernow-k6.c [CPUFREQ] checkpatch cleanups for powernow-k6 2009-02-24 22:47:29 -05:00
powernow-k7.c [CPUFREQ] checkpatch cleanups for powernow-k7 2009-02-24 22:47:30 -05:00
powernow-k7.h [CPUFREQ] cpufreq: remove CVS keywords 2008-05-19 18:17:49 -04:00
powernow-k8.c Merge branch 'linus' into cpumask-for-linus 2009-03-30 23:53:32 +02:00
powernow-k8.h [CPUFREQ] powernow-k8: Always compile powernow-k8 driver with ACPI support 2009-02-24 22:47:31 -05:00
sc520_freq.c [CPUFREQ] checkpatch cleanups for sc520 2009-02-24 22:47:29 -05:00
speedstep-centrino.c x86: use symbolic constants for MSR_IA32_MISC_ENABLE bits 2009-02-20 12:07:43 +01:00
speedstep-ich.c Merge branch 'linus' into cpumask-for-linus 2009-03-30 23:53:32 +02:00
speedstep-lib.c [CPUFREQ] p4-clockmod reports wrong frequency. 2009-02-24 22:47:32 -05:00
speedstep-lib.h [CPUFREQ] checkpatch cleanups for speedstep related drivers. 2009-02-24 22:47:30 -05:00
speedstep-smi.c [CPUFREQ] checkpatch cleanups for speedstep related drivers. 2009-02-24 22:47:30 -05:00