lkml.org 
[lkml]   [2008]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH 2/3] stop_machine: simplify
Date
On Wednesday 09 July 2008 00:27:03 Mathieu Desnoyers wrote:
> Hi Rusty,
>
> * Rusty Russell (rusty@rustcorp.com.au) wrote:
> > stop_machine creates a kthread which creates kernel threads. We can
> > create those threads directly and simplify things a little. Some care
> > must be taken with CPU hotunplug, which has special needs, but that code
> > seems more robust than it was in the past.
> >
> > Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
> > ---
> > include/linux/stop_machine.h | 12 -
> > kernel/cpu.c | 13 -
> > kernel/stop_machine.c | 299
> > ++++++++++++++++++------------------------- 3 files changed, 135
> > insertions(+), 189 deletions(-)
> >
> > diff --git a/include/linux/stop_machine.h b/include/linux/stop_machine.h
> > --- a/include/linux/stop_machine.h
> > +++ b/include/linux/stop_machine.h
> > @@ -17,13 +17,12 @@
> > * @data: the data ptr for the @fn()
> > * @cpu: if @cpu == n, run @fn() on cpu n
> > * if @cpu == NR_CPUS, run @fn() on any cpu
> > - * if @cpu == ALL_CPUS, run @fn() first on the calling cpu, and
> > then - * concurrently on all the other cpus
> > + * if @cpu == ALL_CPUS, run @fn() on every online CPU.
> > *
>
> I agree with this change if it makes things simpler. However, callers
> must be aware of this important change :
>
> "run @fn() first on the calling cpu, and then concurrently on all the
> other cpus" becomes "run @fn() on every online CPU".

OK. Since that was never in mainline, I think you're the only one who needs
to be aware of the semantic change?

The new symmetric implementation breaks it; hope that isn't a showstopper for
you?

> There were assumptions done in @fn() where a simple non atomic increment
> was used on a static variable to detect that it was the first thread to
> execute. It will have to be changed into an atomic inc/dec and test.
> Given that the other threads have tasks to perform _after_ the first
> thread has executed, they will have to busy-wait (spin) there waiting
> for the first thread to finish its execution.

I assume you can't do that step then call stop_machine.

Thanks,
Rusty.


\
 
 \ /
  Last update: 2008-07-09 06:55    [from the cache]
©2003-2011 Jasper Spaans. Advertise on this site