|
@@ -2872,3 +2872,23 @@ static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp)
|
|
}
|
|
}
|
|
|
|
|
|
#endif /* #else #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */
|
|
#endif /* #else #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Is this CPU a NO_HZ_FULL CPU that should ignore RCU so that the
|
|
|
|
+ * grace-period kthread will do force_quiescent_state() processing?
|
|
|
|
+ * The idea is to avoid waking up RCU core processing on such a
|
|
|
|
+ * CPU unless the grace period has extended for too long.
|
|
|
|
+ *
|
|
|
|
+ * This code relies on the fact that all NO_HZ_FULL CPUs are also
|
|
|
|
+ * CONFIG_RCU_NOCB_CPUs.
|
|
|
|
+ */
|
|
|
|
+static bool rcu_nohz_full_cpu(struct rcu_state *rsp)
|
|
|
|
+{
|
|
|
|
+#ifdef CONFIG_NO_HZ_FULL
|
|
|
|
+ if (tick_nohz_full_cpu(smp_processor_id()) &&
|
|
|
|
+ (!rcu_gp_in_progress(rsp) ||
|
|
|
|
+ ULONG_CMP_LT(jiffies, ACCESS_ONCE(rsp->gp_start) + HZ)))
|
|
|
|
+ return 1;
|
|
|
|
+#endif /* #ifdef CONFIG_NO_HZ_FULL */
|
|
|
|
+ return 0;
|
|
|
|
+}
|