Re: [PATCH v2 tip/core/rcu 01/10] rcu: Add call_rcu_tasks()
From: Paul E. McKenney
Date: Thu Jul 31 2014 - 12:47:49 EST
On Thu, Jul 31, 2014 at 06:20:30PM +0200, Peter Zijlstra wrote:
> On Thu, Jul 31, 2014 at 09:09:24AM -0700, Paul E. McKenney wrote:
> > Well, that is one of the questions in the 0/10 cover letter. If it turns
> > out to be necessary to worry about idle-task trampolines, it should be
> > possible to avoid hammering all idle CPUs in the common case. Though maybe
> > battery-powered devices won't need RCU-tasks.
>
> So do we really need this to be a full blown RCU implementation? Could
> we not live with something like a task_barrier() function that
> guarantees the same as this rcu_task_synchronize() or somesuch?
>
> So for rostedt's case he could patch out all trampolines, call
> task_barrier() and then free them.
>
> We can make task_barrier() force each cpu to resched once -- which, if
> we do that after the task's have all scheduled once, could be the empty
> set.
>
> It also pushes the cost of this machinery into the caller of
> task_barrier() and not in some random kthread (yet another one).
The idea here is to avoid having the kthread and to avoid providing
callbacks, but to instead do the work currently done by the kthread
in a synchronous function called by the updater?
My concern with this approach is that I bet that Steven will want
to have multiple concurrent calls to remove trampolines, and if I
need to support that efficiently, I end up with more-painful counter
tricks instead of the current callbacks.
Or am I confused about what you are suggesting?
> Now, if only task_work would work for kernel threads, then we could do
> something far nicer...
OK, I'll bite... What is task_work? I am guessing that you are not
talking about struct ql4_task_data in drivers/scsi/qla4xxx/ql4_def.h. ;-)
Thanx, Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/