|
@@ -88,6 +88,14 @@ struct rcu_dynticks {
|
|
|
/* Process level is worth LLONG_MAX/2. */
|
|
|
int dynticks_nmi_nesting; /* Track NMI nesting level. */
|
|
|
atomic_t dynticks; /* Even value for idle, else odd. */
|
|
|
+#ifdef CONFIG_NO_HZ_FULL_SYSIDLE
|
|
|
+ long long dynticks_idle_nesting;
|
|
|
+ /* irq/process nesting level from idle. */
|
|
|
+ atomic_t dynticks_idle; /* Even value for idle, else odd. */
|
|
|
+ /* "Idle" excludes userspace execution. */
|
|
|
+ unsigned long dynticks_idle_jiffies;
|
|
|
+ /* End of last non-NMI non-idle period. */
|
|
|
+#endif /* #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */
|
|
|
#ifdef CONFIG_RCU_FAST_NO_HZ
|
|
|
bool all_lazy; /* Are all CPU's CBs lazy? */
|
|
|
unsigned long nonlazy_posted;
|
|
@@ -545,6 +553,7 @@ static void rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp);
|
|
|
static void rcu_spawn_nocb_kthreads(struct rcu_state *rsp);
|
|
|
static void rcu_kick_nohz_cpu(int cpu);
|
|
|
static bool init_nocb_callback_list(struct rcu_data *rdp);
|
|
|
+static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp);
|
|
|
|
|
|
#endif /* #ifndef RCU_TREE_NONCORE */
|
|
|
|