rcu: Add call_rcu_tasks()
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 27 Jun 2014 20:42:20 +0000 (13:42 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 7 Sep 2014 23:27:19 +0000 (16:27 -0700)
commit8315f42295d2667a7f942f154b73a86fd7cb2227
tree67057935dada3305e0dab95f546359b40cc29b96
parent11ed7f934cb807f26da09547b5946c2e534d1dac
rcu: Add call_rcu_tasks()

This commit adds a new RCU-tasks flavor of RCU, which provides
call_rcu_tasks().  This RCU flavor's quiescent states are voluntary
context switch (not preemption!) and userspace execution (not the idle
loop -- use some sort of schedule_on_each_cpu() if you need to handle the
idle tasks.  Note that unlike other RCU flavors, these quiescent states
occur in tasks, not necessarily CPUs.  Includes fixes from Steven Rostedt.

This RCU flavor is assumed to have very infrequent latency-tolerant
updaters.  This assumption permits significant simplifications, including
a single global callback list protected by a single global lock, along
with a single task-private linked list containing all tasks that have not
yet passed through a quiescent state.  If experience shows this assumption
to be incorrect, the required additional complexity will be added.

Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/init_task.h
include/linux/rcupdate.h
include/linux/sched.h
init/Kconfig
kernel/rcu/tiny.c
kernel/rcu/tree.c
kernel/rcu/update.c