clocksource: Consistent de-rate when marking unstable
When a registered clocksource gets marked unstable the watchdog_kthread will de-rate and re-select the clocksource. Ensure it also de-rates when getting called on an unregistered clocksource. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: len.brown@intel.com Cc: rjw@rjwysocki.net Cc: diego.viola@gmail.com Cc: rui.zhang@intel.com Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20180430100344.594904898@infradead.org
This commit is contained in:
Родитель
e3b4f79025
Коммит
cd2af07d82
|
@ -152,12 +152,19 @@ static void __clocksource_unstable(struct clocksource *cs)
|
||||||
cs->flags &= ~(CLOCK_SOURCE_VALID_FOR_HRES | CLOCK_SOURCE_WATCHDOG);
|
cs->flags &= ~(CLOCK_SOURCE_VALID_FOR_HRES | CLOCK_SOURCE_WATCHDOG);
|
||||||
cs->flags |= CLOCK_SOURCE_UNSTABLE;
|
cs->flags |= CLOCK_SOURCE_UNSTABLE;
|
||||||
|
|
||||||
if (list_empty(&cs->list))
|
/*
|
||||||
|
* If the clocksource is registered clocksource_watchdog_kthread() will
|
||||||
|
* re-rate and re-select.
|
||||||
|
*/
|
||||||
|
if (list_empty(&cs->list)) {
|
||||||
|
cs->rating = 0;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (cs->mark_unstable)
|
if (cs->mark_unstable)
|
||||||
cs->mark_unstable(cs);
|
cs->mark_unstable(cs);
|
||||||
|
|
||||||
|
/* kick clocksource_watchdog_kthread() */
|
||||||
if (finished_booting)
|
if (finished_booting)
|
||||||
schedule_work(&watchdog_work);
|
schedule_work(&watchdog_work);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче