diff options
Diffstat (limited to 'kernel/sched/rt.c')
| -rw-r--r-- | kernel/sched/rt.c | 8 | 
1 files changed, 7 insertions, 1 deletions
| diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 4056c19ca3f0..665ace2fc558 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -2034,8 +2034,9 @@ static void pull_rt_task(struct rq *this_rq)  	bool resched = false;  	struct task_struct *p;  	struct rq *src_rq; +	int rt_overload_count = rt_overloaded(this_rq); -	if (likely(!rt_overloaded(this_rq))) +	if (likely(!rt_overload_count))  		return;  	/* @@ -2044,6 +2045,11 @@ static void pull_rt_task(struct rq *this_rq)  	 */  	smp_rmb(); +	/* If we are the only overloaded CPU do nothing */ +	if (rt_overload_count == 1 && +	    cpumask_test_cpu(this_rq->cpu, this_rq->rd->rto_mask)) +		return; +  #ifdef HAVE_RT_PUSH_IPI  	if (sched_feat(RT_PUSH_IPI)) {  		tell_cpu_to_push(this_rq); | 

