sched-clock: Migrate to use new tick dependency mask model
Instead of checking sched_clock_stable from the nohz subsystem to verify its tick dependency, migrate it to the new mask in order to include it to the all-in-one check. Reviewed-by: Chris Metcalf <cmetcalf@ezchip.com> Cc: Christoph Lameter <cl@linux.com> Cc: Chris Metcalf <cmetcalf@ezchip.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Luiz Capitulino <lcapitulino@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
@@ -61,6 +61,7 @@
|
|||||||
#include <linux/static_key.h>
|
#include <linux/static_key.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/tick.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scheduler clock - returns current time in nanosec units.
|
* Scheduler clock - returns current time in nanosec units.
|
||||||
@@ -89,6 +90,8 @@ static void __set_sched_clock_stable(void)
|
|||||||
{
|
{
|
||||||
if (!sched_clock_stable())
|
if (!sched_clock_stable())
|
||||||
static_key_slow_inc(&__sched_clock_stable);
|
static_key_slow_inc(&__sched_clock_stable);
|
||||||
|
|
||||||
|
tick_dep_clear(TICK_DEP_BIT_CLOCK_UNSTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_sched_clock_stable(void)
|
void set_sched_clock_stable(void)
|
||||||
@@ -108,6 +111,8 @@ static void __clear_sched_clock_stable(struct work_struct *work)
|
|||||||
/* XXX worry about clock continuity */
|
/* XXX worry about clock continuity */
|
||||||
if (sched_clock_stable())
|
if (sched_clock_stable())
|
||||||
static_key_slow_dec(&__sched_clock_stable);
|
static_key_slow_dec(&__sched_clock_stable);
|
||||||
|
|
||||||
|
tick_dep_set(TICK_DEP_BIT_CLOCK_UNSTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLARE_WORK(sched_clock_work, __clear_sched_clock_stable);
|
static DECLARE_WORK(sched_clock_work, __clear_sched_clock_stable);
|
||||||
|
|||||||
@@ -204,25 +204,6 @@ static bool can_stop_full_tick(struct tick_sched *ts)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
|
|
||||||
/*
|
|
||||||
* sched_clock_tick() needs us?
|
|
||||||
*
|
|
||||||
* TODO: kick full dynticks CPUs when
|
|
||||||
* sched_clock_stable is set.
|
|
||||||
*/
|
|
||||||
if (!sched_clock_stable()) {
|
|
||||||
trace_tick_stop(0, TICK_DEP_MASK_CLOCK_UNSTABLE);
|
|
||||||
/*
|
|
||||||
* Don't allow the user to think they can get
|
|
||||||
* full NO_HZ with this machine.
|
|
||||||
*/
|
|
||||||
WARN_ONCE(tick_nohz_full_running,
|
|
||||||
"NO_HZ FULL will not work with unstable sched clock");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user