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,Is there a reason to not also preempt in the wait-loop? Surely the same
}
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(),
reason is still valid there too?