]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
rcu: Add warning for RCU_FAST_NO_HZ timer firing
authorPaul E. McKenney <paul.mckenney@linaro.org>
Mon, 23 Apr 2012 17:06:39 +0000 (10:06 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 25 Apr 2012 03:55:21 +0000 (20:55 -0700)
RCU_FAST_NO_HZ uses a timer to limit the time that a CPU with callbacks
can remain in dyntick-idle mode.  This timer is cancelled when the CPU
exits idle, and therefore should never fire.  However, if the timer
were migrated to some other CPU for whatever reason (1) the timer could
actually fire and (2) firing on some other CPU would fail to wake up the
CPU with callbacks, possibly resulting in sluggishness or a system hang.

This commit therfore adds a WARN_ON_ONCE() to the timer handler in order
to detect this condition.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree_plugin.h

index 90b3de54995ebd85e6c7ca343bf7f9b23db0b6a2..78fbec4a4bc38058cfadde8bde3a5d0793b70f8e 100644 (file)
@@ -2065,6 +2065,7 @@ static bool rcu_cpu_has_nonlazy_callbacks(int cpu)
  */
 static void rcu_idle_gp_timer_func(unsigned long unused)
 {
+       WARN_ON_ONCE(1); /* Getting here can hang the system... */
        trace_rcu_prep_idle("Timer");
 }