On Fri, Feb 12, 2016 at 12:32:12PM -0500, Waiman Long wrote: > @@ -358,8 +373,8 @@ static bool mutex_optimistic_spin(struct mutex *lock, > } > > mutex_set_owner(lock); > - osq_unlock(&lock->osq); > - return true; > + acquired = true; > + break; > } > > /* > @@ -380,7 +395,10 @@ static bool mutex_optimistic_spin(struct mutex *lock, > cpu_relax_lowlatency(); > } > > - osq_unlock(&lock->osq); > + if (!waiter) > + osq_unlock(&lock->osq); > + if (acquired || waiter) > + return acquired; > done: > /* > * If we fell out of the spin path because of need_resched(),
Is there a reason to not also preempt in the wait-loop? Surely the same reason is still valid there too?