diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2019-08-12 16:14:00 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2019-10-28 07:02:21 -0700 |
commit | 66e4c33b51bc515ca803c0948cf1525b53ffd631 (patch) | |
tree | 7c50562b611dd88b63531bd2548fd669e7e8c4c3 /kernel/rcu/tree.h | |
parent | 79ba7ff5a9925f5c170f51ed7a96d1475eb6c27f (diff) | |
download | lwn-66e4c33b51bc515ca803c0948cf1525b53ffd631.tar.gz lwn-66e4c33b51bc515ca803c0948cf1525b53ffd631.zip |
rcu: Force tick on for nohz_full CPUs not reaching quiescent states
CPUs running for long time periods in the kernel in nohz_full mode
might leave the scheduling-clock interrupt disabled for then full
duration of their in-kernel execution. This can (among other things)
delay grace periods. This commit therefore forces the tick back on
for any nohz_full CPU that is failing to pass through a quiescent state
upon return from interrupt, which the resched_cpu() will induce.
Reported-by: Joel Fernandes <joel@joelfernandes.org>
[ paulmck: Clear ->rcu_forced_tick as reported by Joel Fernandes testing. ]
[ paulmck: Apply Joel Fernandes TICK_DEP_MASK_RCU->TICK_DEP_BIT_RCU fix. ]
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'kernel/rcu/tree.h')
-rw-r--r-- | kernel/rcu/tree.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index c612f306fe89..055c31781d3a 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -181,6 +181,7 @@ struct rcu_data { atomic_t dynticks; /* Even value for idle, else odd. */ bool rcu_need_heavy_qs; /* GP old, so heavy quiescent state! */ bool rcu_urgent_qs; /* GP old need light quiescent state. */ + bool rcu_forced_tick; /* Forced tick to provide QS. */ #ifdef CONFIG_RCU_FAST_NO_HZ bool all_lazy; /* All CPU's CBs lazy at idle start? */ unsigned long last_accelerate; /* Last jiffy CBs were accelerated. */ |