lkml.org 
[lkml]   [2012]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v8 7/8] mm: only IPI CPUs to drain local pages if they exist
    Date
    From
    On Sun, 05 Feb 2012 14:48:41 +0100, Gilad Ben-Yossef <gilad@benyossef.com> wrote:
    > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    > index d2186ec..3ff5aff 100644
    > --- a/mm/page_alloc.c
    > +++ b/mm/page_alloc.c
    > @@ -1161,11 +1161,46 @@ void drain_local_pages(void *arg)
    > }
    > /*
    > - * Spill all the per-cpu pages from all CPUs back into the buddy allocator
    > + * Spill all the per-cpu pages from all CPUs back into the buddy allocator.
    > + *
    > + * Note that this code is protected against sending an IPI to an offline
    > + * CPU but does not guarantee sending an IPI to newly hotplugged CPUs:
    > + * on_each_cpu_mask() blocks hotplug and won't talk to offlined CPUs but
    > + * nothing keeps CPUs from showing up after we populated the cpumask and
    > + * before the call to on_each_cpu_mask().
    > */
    > void drain_all_pages(void)
    > {
    > - on_each_cpu(drain_local_pages, NULL, 1);
    > + int cpu;
    > + struct per_cpu_pageset *pcp;
    > + struct zone *zone;
    > +
    > + /* Allocate in the BSS so we wont require allocation in
    > + * direct reclaim path for CONFIG_CPUMASK_OFFSTACK=y
    > + */

    If you are going to send next iteration, this comment should have
    “/*” on its own line just like comment below.

    > + static cpumask_t cpus_with_pcps;
    > +
    > + /*
    > + * We don't care about racing with CPU hotplug event
    > + * as offline notification will cause the notified
    > + * cpu to drain that CPU pcps and on_each_cpu_mask
    > + * disables preemption as part of its processing
    > + */
    > + 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);
    > + }
    > + on_each_cpu_mask(&cpus_with_pcps, drain_local_pages, NULL, 1);
    > }
    > #ifdef CONFIG_HIBERNATION


    --
    Best regards, _ _
    .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o
    ..o | Computer Science, Michał “mina86” Nazarewicz (o o)
    ooo +----<email/xmpp: mpn@google.com>--------------ooO--(_)--Ooo--
    --
    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-02-08 10:35    [W:0.032 / U:34.960 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site