On Fri, Apr 01, 2016 at 05:12:29PM +0200, Luca Abeni wrote:
> @@ -526,7 +575,18 @@ static void update_dl_entity(struct sched_dl_entity 
> *dl_se,
>       struct dl_rq *dl_rq = dl_rq_of_se(dl_se);
>       struct rq *rq = rq_of_dl_rq(dl_rq);
>  
> -     add_running_bw(dl_se, dl_rq);
> +     /*
> +      * If the "inactive timer" is still active, stop it and leave
> +      * the active utilisation unchanged.
> +      * Otherwise, increase the active utilisation.
> +      * If the timer cannot be cancelled, inactive_task_timer() will
> +      * find the task state as TASK_RUNNING, and will do nothing, so
> +      * we are still safe.
> +      */
> +     if (hrtimer_active(&dl_se->inactive_timer))
> +             hrtimer_try_to_cancel(&dl_se->inactive_timer);

_try_, what happens if that fails?

> +     else
> +             add_running_bw(dl_se, dl_rq);
>  
>       if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>           dl_entity_overflow(dl_se, pi_se, rq_clock(rq))) {

Reply via email to