lkml.org 
[lkml]   [2012]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 2/2] mm: page allocator: Do not drain per-cpu lists via IPI from page allocator context
    From
    Date
    On Thu, 2012-01-12 at 16:51 +0200, Gilad Ben-Yossef wrote:
    > What I can't figure out is why we don't need get/put_online_cpus()
    > pair around each and every call
    > to on_each_cpu everywhere? and if we do, perhaps making it a part of
    > on_each_cpu is the way to go?
    >
    > Something like:
    >
    > diff --git a/kernel/smp.c b/kernel/smp.c
    > index f66a1b2..cfa3882 100644
    > --- a/kernel/smp.c
    > +++ b/kernel/smp.c
    > @@ -691,11 +691,15 @@ void on_each_cpu(void (*func) (void *info), void
    > *info, int wait)
    > {
    > unsigned long flags;
    >
    > + BUG_ON(in_atomic());
    > +
    > + get_online_cpus();
    > preempt_disable();

    Your preempt_disable() here serializes against hotplug..

    > smp_call_function(func, info, wait);
    > local_irq_save(flags);
    > func(info);
    > local_irq_restore(flags);
    > preempt_enable();
    > + put_online_cpus();
    > }
    > EXPORT_SYMBOL(on_each_cpu);


    \
     
     \ /
      Last update: 2012-01-12 16:11    [W:0.026 / U:1.136 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site