lkml.org 
[lkml]   [2012]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [v7 7/8] mm: only IPI CPUs to drain local pages if they exist
    On Mon, Jan 30, 2012 at 05:14:37PM +0200, Gilad Ben-Yossef wrote:
    > >> +     for_each_online_cpu(cpu) {
    > >> +             bool has_pcps = false;
    > >> +             for_each_populated_zone(zone) {
    > >> +                     pcp = per_cpu_ptr(zone->pageset, cpu);
    > >> +                     if (pcp->pcp.count) {
    > >> +                             has_pcps = true;
    > >> +                             break;
    > >> +                     }
    > >> +             }
    > >> +             if (has_pcps)
    > >> +                     cpumask_set_cpu(cpu, &cpus_with_pcps);
    > >> +             else
    > >> +                     cpumask_clear_cpu(cpu, &cpus_with_pcps);
    > >> +     }
    > >
    > > Lets take two CPUs running this code at the same time. CPU 1 has per-cpu
    > > pages in all zones. CPU 2 has no per-cpu pages in any zone. If both run
    > > at the same time, CPU 2 can be clearing the mask for CPU 1 before it has
    > > had a chance to send the IPI. This means we'll miss sending IPIs to CPUs
    > > that we intended to.
    >
    > I'm confused. You seem to be assuming that each CPU is looking at its own pcps
    > only (per zone).

    /me slaps self

    I was assuming exactly this.

    > Assuming no change in the state of the pcps when both CPUs
    > run this code at the same time, both of them should mark the bit for
    > their respective
    > CPUs the same, unless one of them raced and managed to send the IPI to clear
    > pcps from the other, at which point you might see one of them send a
    > spurious IPI
    > to drains pcps that have been drained - but that isn't bad.
    >

    Indeed, the race is tiny and the consequences are not important.

    > At least, that is what I meant the code to do and what I believe it
    > does. What have I
    > missed?
    >

    Nothing, the problem was on my side. Sorry for the noise.

    --
    Mel Gorman
    SUSE Labs
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-01-30 16:47    [W:2.608 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site