diff options
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 10 | 
1 files changed, 9 insertions, 1 deletions
| diff --git a/kernel/sched.c b/kernel/sched.c index 41541d79e3c..09b574e7f4d 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -3865,8 +3865,16 @@ int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner)  		/*  		 * Owner changed, break to re-assess state.  		 */ -		if (lock->owner != owner) +		if (lock->owner != owner) { +			/* +			 * If the lock has switched to a different owner, +			 * we likely have heavy contention. Return 0 to quit +			 * optimistic spinning and not contend further: +			 */ +			if (lock->owner) +				return 0;  			break; +		}  		/*  		 * Is that owner really running on that cpu? | 
