|
@@ -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_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;
|
|
|
+ }
|
|
|
|
|
|
if (cs->mark_unstable)
|
|
|
cs->mark_unstable(cs);
|
|
|
|
|
|
+ /* kick clocksource_watchdog_kthread() */
|
|
|
if (finished_booting)
|
|
|
schedule_work(&watchdog_work);
|
|
|
}
|