Messages in this thread | | | Date | Mon, 13 Apr 2009 17:31:13 -0700 | From | Andrew Morton <> | Subject | Re: mmotm 2009-04-10-02-21 uploaded - forkbombed by work_for_cpu |
| |
On Mon, 13 Apr 2009 16:50:45 -0700 (PDT) Linus Torvalds <torvalds@linux-foundation.org> wrote:
> > > So I applied this (commit 01599fca6758d2cd133e78f87426fc851c9ea725: > "cpufreq: use smp_call_function_[single|many]() in acpi-cpufreq.c"), but > just realized - because of a compiler warning - that this looks > suspicious: > > On Mon, 13 Apr 2009, Andrew Morton wrote: > > @@ -283,7 +280,7 @@ static unsigned int get_measured_perf(st > > unsigned int perf_percent; > > unsigned int retval; > > > > - if (!work_on_cpu(cpu, read_measured_perf_ctrs, &readin)) > > + if (smp_call_function_single(cpu, read_measured_perf_ctrs, &cur, 1)) > > return 0; > > > > cur.aperf.whole = readin.aperf.whole - > > How and why did that "read_measured_perf_ctrs, &readin" become > "read_measured_perf_ctrs, &cur" when the work_on_cpu() was converted to > "smp_call_function_single()"? > > Looks like a bug. But such an odd one that I wonder whether there was some > thought behind it? Andrew? >
<scratches head>
OK, the acpi tree went and had conflicting changes merged into it after I'd written the patch:
@@ -281,52 +279,57 @@ static long read_measured_perf_ctrs(void static unsigned int get_measured_perf(struct cpufreq_policy *policy, unsigned int cpu) { - struct perf_cur cur; + struct perf_pair readin, cur; unsigned int perf_percent; unsigned int retval; - if (!work_on_cpu(cpu, read_measured_perf_ctrs, &cur)) + if (!work_on_cpu(cpu, read_measured_perf_ctrs, &readin)) return 0; + cur.aperf.whole = readin.aperf.whole - + per_cpu(drv_data, cpu)->saved_aperf; + cur.mperf.whole = readin.mperf.whole - + per_cpu(drv_data, cpu)->saved_mperf; + per_cpu(drv_data, cpu)->saved_aperf = readin.aperf.whole; + per_cpu(drv_data, cpu)->saved_mperf = readin.mperf.whole; +
and it appears that I incorrectly reverted part of 18b2646fe3babeb40b34a0c1751e0bf5adfdc64c while fixing the resulting rejects.
Switching it to `readin' looks correct.
| |