lkml.org 
[lkml]   [2009]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 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.


    \
     
     \ /
      Last update: 2009-04-14 02:41    [W:3.042 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site