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()

Reply via email to