On 03/16/15 00:10, Rabin Vincent wrote:
On Sun, Mar 15, 2015 at 11:49:07PM +0200, Matthias Bonne wrote:
So the counter is set to 1 before taking the spinlock, which I think might cause the race. Did I miss something?
Yes, you miss the fact that __mutex_slowpath_needs_to_unlock() is 0 for the CONFIG_DEBUG_MUTEXES case:
#ifdef CONFIG_DEBUG_MUTEXES # include "mutex-debug.h" # include <asm-generic/mutex-null.h> /* * Must be 0 for the debug case so we do not do the unlock outside of the * wait_lock region. debug_mutex_unlock() will do the actual unlock in this * case. */ # undef __mutex_slowpath_needs_to_unlock # define __mutex_slowpath_needs_to_unlock() 0
Right, I overlooked this part. Thanks to both of you for the clarifications.