]> git.karo-electronics.de Git - karo-tx-linux.git/commit
rcu: New rcu_user_enter_after_irq() and rcu_user_exit_after_irq() APIs
authorFrederic Weisbecker <fweisbec@gmail.com>
Mon, 4 Jun 2012 23:42:35 +0000 (16:42 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 18 Sep 2012 23:27:30 +0000 (16:27 -0700)
commit3401af8e8cbd6ca9eb79eea186687a07a02a999a
tree660d3f2a01c8629a1a0faabb091f983ec1d90f46
parent1bfb995ef50225762c4bbe972bc098d6f20e4541
rcu: New rcu_user_enter_after_irq() and rcu_user_exit_after_irq() APIs

In some cases, it is necessary to enter or exit userspace-RCU-idle mode
from an interrupt handler, for example, if some other CPU sends this
CPU a resched IPI.  In this case, the current CPU would enter the IPI
handler in userspace-RCU-idle mode, but would need to exit the IPI handler
after having exited that mode.

To allow this to work, this commit adds two new APIs to TREE_RCU:

- rcu_user_enter_after_irq(). This must be called from an interrupt between
rcu_irq_enter() and rcu_irq_exit().  After the irq calls rcu_irq_exit(),
the irq handler will return into an RCU extended quiescent state.
In theory, this interrupt is never a nested interrupt, but in practice
it might interrupt softirq, which looks to RCU like a nested interrupt.

- rcu_user_exit_after_irq(). This must be called from a non-nesting
interrupt, interrupting an RCU extended quiescent state, also
between rcu_irq_enter() and rcu_irq_exit(). After the irq calls
rcu_irq_exit(), the irq handler will return in an RCU non-quiescent
state.

[ Combined with "Allow calls to rcu_exit_user_irq from nesting irqs." ]

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
include/linux/rcupdate.h
kernel/rcutree.c