[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/6] sched: add function to execute a function synchronously on a physical cpu
On 11/03/16 13:57, Peter Zijlstra wrote: > On Fri, Mar 11, 2016 at 01:48:12PM +0100, Juergen Gross wrote: >> On 11/03/16 13:42, Peter Zijlstra wrote: >>> how about something like: >>> >>> struct xen_callback_struct { >>> struct work_struct work; >>> struct completion done; > int (*func)(void*); >>> void * data; >>> int ret; >>> }; >>> >>> static void xen_callback_f(struct work_struct *work) >>> { >>> struct xen_callback_struct *xcs = container_of(work, struct >>> xen_callback_struct, work); >>> >>> xcs->ret = xcs->func(xcs->data); >>> >>> complete(&xcs->done); >>> } >>> >>> xen_call_on_cpu_sync(int cpu, int (*func)(void *), void *data) >>> { >>> struct xen_callback_state xcs = { >>> .work = __WORK_INITIALIZER(xcs.work, xen_callback_f); >>> .done = COMPLETION_INITIALIZER_ONSTACK(xcs.done), > .func = func, >>> .data = data, >>> }; >>> >>> queue_work_on(&work, cpu); >>> wait_for_completion(&xcs.done); >>> >>> return xcs.ret; >>> } >>> >>> No mucking about with the scheduler state, no new exported functions >>> etc.. >>> >> >> Hey, I like it. Can't be limited to Xen as on bare metal the function >> needs to be called on cpu 0, too. But avoiding the scheduler fiddling >> is much better! As this seems to be required for Dell hardware only, >> I could add it to some Dell base driver in case you don't want to add >> it to core code. > > Urgh yeah, saw that in your other mail. It looks like I should go look > at set_cpus_allowed_ptr() abuse :/ > > Not sure where this would fit best, maybe somewhere near workqueue.c or > smp.c. At a first glance I think smp.c would be the better choice. I'll have a try. Thanks, Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |