|
@@ -3865,8 +3865,16 @@ int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner)
|
|
/*
|
|
/*
|
|
* Owner changed, break to re-assess state.
|
|
* 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;
|
|
break;
|
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
/*
|
|
* Is that owner really running on that cpu?
|
|
* Is that owner really running on that cpu?
|