On Wed, Jun 07, 2017 at 04:48:34PM +0200, Radim Krčmář wrote: > 2017-06-01 17:48+0200, Andrew Jones: > > Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> > > --- > > diff --git a/lib/x86/smp.c b/lib/x86/smp.c > > @@ -1,5 +1,6 @@ > > @@ -91,6 +95,21 @@ void on_cpu_async(int cpu, void (*function)(void *data), void *data) > > __on_cpu(cpu, function, data, 0); > > } > > > > (I'm sorry the review took so long.) > > > +void on_cpus(void (*func)(void)) > > +{ > > + int cpu; > > + > > + for (cpu = cpu_count() - 1; cpu >= 0; --cpu) > > + on_cpu_async(cpu, (ipi_function_type)func, NULL); > > Calling a casted function pointer is undefined behavior in C and I think > that keeping the argument is better anyway -- the API is consistent that > way and you don't need to introduce a global in some patches. I agree I shouldn't use undefined behavior and I have no strong preference on the API, so I 'll change this, and I'll fix ARM too. > > > + > > + while (cpus_active()) > > + ; > > Add a pause() here, Will do. Thanks, drew