summaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2013-06-20 22:50:40 +0200
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2013-08-19 02:40:09 +0200
commit1eafd31c640d6799c63136246a59d608bed93c74 (patch)
treef2ee193817ab4ce4ca4f789033d65a8a326d16bf /kernel/rcutree.c
parentrcu: Make call_rcu() leak callbacks for debug-object errors (diff)
downloadlinux-1eafd31c640d6799c63136246a59d608bed93c74.tar.xz
linux-1eafd31c640d6799c63136246a59d608bed93c74.zip
rcu: Avoid redundant grace-period kthread wakeups
When setting up an in-the-future "advanced" grace period, the code needs to wake up the relevant grace-period kthread, which it currently does unconditionally. However, this results in needless wakeups in the case where the advanced grace period is being set up by the grace-period kthread itself, which is a non-uncommon situation. This commit therefore checks to see if the running thread is the grace-period kthread, and avoids doing the irq_work_queue()-mediated wakeup in that case. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 91840566e294..c6a064abd6a0 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1576,10 +1576,12 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp,
/*
* We can't do wakeups while holding the rnp->lock, as that
- * could cause possible deadlocks with the rq->lock. Deter
- * the wakeup to interrupt context.
+ * could cause possible deadlocks with the rq->lock. Defer
+ * the wakeup to interrupt context. And don't bother waking
+ * up the running kthread.
*/
- irq_work_queue(&rsp->wakeup_work);
+ if (current != rsp->gp_kthread)
+ irq_work_queue(&rsp->wakeup_work);
}
/*