Re: [PATCH v4 3/6] smp: add function to execute a function synchronously on a cpu
From: Peter Zijlstra <peterz@infradead.org>
Date: 2016-04-05 08:11:41
Also in:
lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2016-04-05 08:11:41
Also in:
lkml
On Tue, Apr 05, 2016 at 07:10:04AM +0200, Juergen Gross wrote:
+int smp_call_on_cpu(unsigned int cpu, bool pin, int (*func)(void *), void *par)
Why .pin and not .phys? .pin does not (to me) reflect the hypervisor/physical-cpu thing. Also, as per smp_call_function_single() would it not be more consistent to make this the last argument?
+{
+ struct smp_call_on_cpu_struct sscs = {
+ .work = __WORK_INITIALIZER(sscs.work, smp_call_on_cpu_callback),
+ .done = COMPLETION_INITIALIZER_ONSTACK(sscs.done),
+ .func = func,
+ .data = par,
+ .cpu = pin ? cpu : -1,
+ };
+
+ if (cpu >= nr_cpu_ids)You might want to also include cpu_online(). if (cpu >= nr_cpu_ids || !cpu_online(cpu))
+ return -ENXIO;
Seeing how its fairly hard to schedule work on a cpu that's not actually there.
+ + queue_work_on(cpu, system_wq, &sscs.work); + wait_for_completion(&sscs.done); + + return sscs.ret; +}