diff options
Diffstat (limited to 'kernel/sched_rt.c')
| -rw-r--r-- | kernel/sched_rt.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 998ba54b454..552310798da 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -199,6 +199,8 @@ static inline struct rt_rq *group_rt_rq(struct sched_rt_entity *rt_se)  static inline void sched_rt_rq_enqueue(struct rt_rq *rt_rq)  { +	if (rt_rq->rt_nr_running) +		resched_task(rq_of_rt_rq(rt_rq)->curr);  }  static inline void sched_rt_rq_dequeue(struct rt_rq *rt_rq) @@ -438,9 +440,6 @@ static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)  {  	u64 runtime = sched_rt_runtime(rt_rq); -	if (runtime == RUNTIME_INF) -		return 0; -  	if (rt_rq->rt_throttled)  		return rt_rq_throttled(rt_rq); @@ -491,9 +490,11 @@ static void update_curr_rt(struct rq *rq)  		rt_rq = rt_rq_of_se(rt_se);  		spin_lock(&rt_rq->rt_runtime_lock); -		rt_rq->rt_time += delta_exec; -		if (sched_rt_runtime_exceeded(rt_rq)) -			resched_task(curr); +		if (sched_rt_runtime(rt_rq) != RUNTIME_INF) { +			rt_rq->rt_time += delta_exec; +			if (sched_rt_runtime_exceeded(rt_rq)) +				resched_task(curr); +		}  		spin_unlock(&rt_rq->rt_runtime_lock);  	}  }  | 
