2006-01-10 02:59:19 +03:00
/*
* Mutexes : blocking mutual exclusion locks
*
* started by Ingo Molnar :
*
* Copyright ( C ) 2004 , 2005 , 2006 Red Hat , Inc . , Ingo Molnar < mingo @ redhat . com >
*
* This file contains mutex debugging related internal prototypes , for the
* ! CONFIG_DEBUG_MUTEXES case . Most of them are NOPs :
*/
2006-06-26 11:24:31 +04:00
# define spin_lock_mutex(lock, flags) \
do { spin_lock ( lock ) ; ( void ) ( flags ) ; } while ( 0 )
# define spin_unlock_mutex(lock, flags) \
do { spin_unlock ( lock ) ; ( void ) ( flags ) ; } while ( 0 )
2016-06-23 22:11:17 +03:00
# define mutex_remove_waiter(lock, waiter, task) \
2006-01-10 02:59:19 +03:00
__list_del ( ( waiter ) - > list . prev , ( waiter ) - > list . next )
2014-07-31 00:41:54 +04:00
# ifdef CONFIG_MUTEX_SPIN_ON_OWNER
2016-05-21 01:19:36 +03:00
/*
* The mutex owner can get read and written to locklessly .
* We should use WRITE_ONCE when writing the owner value to
* avoid store tearing , otherwise , a thread could potentially
* read a partially written and incomplete owner value .
*/
2009-01-12 16:01:47 +03:00
static inline void mutex_set_owner ( struct mutex * lock )
{
2016-05-21 01:19:36 +03:00
WRITE_ONCE ( lock - > owner , current ) ;
2009-01-12 16:01:47 +03:00
}
static inline void mutex_clear_owner ( struct mutex * lock )
{
2016-05-21 01:19:36 +03:00
WRITE_ONCE ( lock - > owner , NULL ) ;
2009-01-12 16:01:47 +03:00
}
# else
static inline void mutex_set_owner ( struct mutex * lock )
{
}
static inline void mutex_clear_owner ( struct mutex * lock )
{
}
# endif
2006-01-10 02:59:19 +03:00
# define debug_mutex_wake_waiter(lock, waiter) do { } while (0)
# define debug_mutex_free_waiter(waiter) do { } while (0)
2006-07-03 11:24:33 +04:00
# define debug_mutex_add_waiter(lock, waiter, ti) do { } while (0)
2006-01-10 02:59:19 +03:00
# define debug_mutex_unlock(lock) do { } while (0)
2006-07-03 11:24:55 +04:00
# define debug_mutex_init(lock, name, key) do { } while (0)
2006-01-10 02:59:19 +03:00
2006-07-03 11:24:33 +04:00
static inline void
debug_mutex_lock_common ( struct mutex * lock , struct mutex_waiter * waiter )
{
}