diff options
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 20 | 
1 files changed, 17 insertions, 3 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index f592ce6f861..48013633d79 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2309,7 +2309,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)   * Cause a process which is running on another CPU to enter   * kernel-mode, without any delay. (to get signals handled.)   * - * NOTE: this function doesnt have to take the runqueue lock, + * NOTE: this function doesn't have to take the runqueue lock,   * because all it wants to ensure is that the remote task enters   * the kernel. If the IPI races and the task has been migrated   * to another CPU then no harm is done and the purpose has been @@ -4997,7 +4997,7 @@ recheck:  	 */  	raw_spin_lock_irqsave(&p->pi_lock, flags);  	/* -	 * To be able to change p->policy safely, the apropriate +	 * To be able to change p->policy safely, the appropriate  	 * runqueue lock must be held.  	 */  	rq = __task_rq_lock(p); @@ -5011,6 +5011,17 @@ recheck:  		return -EINVAL;  	} +	/* +	 * If not changing anything there's no need to proceed further: +	 */ +	if (unlikely(policy == p->policy && (!rt_policy(policy) || +			param->sched_priority == p->rt_priority))) { + +		__task_rq_unlock(rq); +		raw_spin_unlock_irqrestore(&p->pi_lock, flags); +		return 0; +	} +  #ifdef CONFIG_RT_GROUP_SCHED  	if (user) {  		/* @@ -5705,7 +5716,7 @@ void show_state_filter(unsigned long state_filter)  	do_each_thread(g, p) {  		/*  		 * reset the NMI-timeout, listing all files on a slow -		 * console might take alot of time: +		 * console might take a lot of time:  		 */  		touch_nmi_watchdog();  		if (!state_filter || (p->state & state_filter)) @@ -6320,6 +6331,9 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)  		break;  #endif  	} + +	update_max_interval(); +  	return NOTIFY_OK;  }  | 
