aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2012-12-20 12:35:02 -0500
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2013-01-08 17:12:18 -0500
commit353af9c9a866b07492b15a4efd18ec93123d3a1d (patch)
treea514865e4134796a7a1b2cf1ae85e5c89e821eee /kernel
parentd1c3ed669a2d452cacfb48c2d171a1f364dae2ed (diff)
rcu: Prevent soft-lockup complaints about no-CBs CPUs
The wait_event() at the head of the rcu_nocb_kthread() can result in soft-lockup complaints if the CPU in question does not register RCU callbacks for an extended period. This commit therefore changes the wait_event() to a wait_event_interruptible(). Reported-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rcutree_plugin.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index f6e5ec2932b4..43dba2d798ac 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -2366,10 +2366,11 @@ static int rcu_nocb_kthread(void *arg)
2366 for (;;) { 2366 for (;;) {
2367 /* If not polling, wait for next batch of callbacks. */ 2367 /* If not polling, wait for next batch of callbacks. */
2368 if (!rcu_nocb_poll) 2368 if (!rcu_nocb_poll)
2369 wait_event(rdp->nocb_wq, rdp->nocb_head); 2369 wait_event_interruptible(rdp->nocb_wq, rdp->nocb_head);
2370 list = ACCESS_ONCE(rdp->nocb_head); 2370 list = ACCESS_ONCE(rdp->nocb_head);
2371 if (!list) { 2371 if (!list) {
2372 schedule_timeout_interruptible(1); 2372 schedule_timeout_interruptible(1);
2373 flush_signals(current);
2373 continue; 2374 continue;
2374 } 2375 }
2375 2376