Re: [PATCH -v4 8/8] locking/mutex: Enable optimistic spinning of woken waiter

From: Waiman Long
Date: Mon Oct 17 2016 - 19:21:42 EST


On 10/07/2016 10:52 AM, Peter Zijlstra wrote:
@@ -600,7 +630,7 @@ __mutex_lock_common(struct mutex *lock,
mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);

if (__mutex_trylock(lock, false) ||
- mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx)) {
+ mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, false)) {
/* got the lock, yay! */
lock_acquired(&lock->dep_map, ip);
if (use_ww_ctx)
@@ -669,7 +699,8 @@ __mutex_lock_common(struct mutex *lock,
* state back to RUNNING and fall through the next schedule(),
* or we must see its unlock and acquire.
*/
- if (__mutex_trylock(lock, first))
+ if ((first&& mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, true)) ||
+ __mutex_trylock(lock, first))

Do we need a __mutex_trylock() here? mutex_optimistic_spin() will do the trylock and we have one at the top of the loop.

Cheers,
Longman