On Mon, Apr 23, 2018 at 02:38:47PM +0200, Peter Zijlstra wrote: > @@ -142,6 +152,13 @@ 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)) { > + cs->rating = 0; > + return; > + } > + > + __clocksource_change_rating(cs, 0); > + > if (cs->mark_unstable) > cs->mark_unstable(cs); >
Thomas, we could not find the de-rate stuff, but the above can be simplified; what happens is: cs->flags |= UNSTABLE; schedule_work(&watchdog_work) kthread_run(clocksource_watchdog_kthread) __clocksource_watchdog_kthread() if (cs->flags & UNSTABLE) __clocksource_change_rating() clocksource_select()