rcu: Provide cond_resched_rcu_qs() to force quiescent states in long loops
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 1 Jul 2014 18:26:57 +0000 (11:26 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 7 Sep 2014 23:27:20 +0000 (16:27 -0700)
commitbde6c3aa993066acb0d6ce32ecabe03b9d5df92d
tree09ec78a9cfa751ce36288c32c4e5112f34af8582
parent8315f42295d2667a7f942f154b73a86fd7cb2227
rcu: Provide cond_resched_rcu_qs() to force quiescent states in long loops

RCU-tasks requires the occasional voluntary context switch
from CPU-bound in-kernel tasks.  In some cases, this requires
instrumenting cond_resched().  However, there is some reluctance
to countenance unconditionally instrumenting cond_resched() (see
http://lwn.net/Articles/603252/), so this commit creates a separate
cond_resched_rcu_qs() that may be used in place of cond_resched() in
locations prone to long-duration in-kernel looping.

This commit currently instruments only RCU-tasks.  Future possibilities
include also instrumenting RCU, RCU-bh, and RCU-sched in order to reduce
IPI usage.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
fs/file.c
include/linux/rcupdate.h
kernel/rcu/rcutorture.c
kernel/rcu/tree.c
kernel/rcu/tree_plugin.h
mm/mlock.c