summaryrefslogtreecommitdiffstats
path: root/include/sys
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-06-24 11:57:14 -0700
committerBrian Behlendorf <[email protected]>2011-06-24 13:00:08 -0700
commit86fd39f354778eb10e77a7c1660b59ca16ffcc16 (patch)
treeddba0bbdcc45babd1863a732c96bc475a19251a7 /include/sys
parent79593b0dec57ee94c5bb56cdc2770ebde81ecea9 (diff)
Linux 2.6.39 compat, mutex owner
Prior to Linux 2.6.39 when CONFIG_DEBUG_MUTEXES was defined the kernel stored a thread_info pointer as the mutex owner. From this you could get the pointer of the current task_struct to compare with get_current(). As of Linux 2.6.39 this behavior has changed and now the mutex stores a pointer to the task_struct. This commit detects the type of pointer stored in the mutex and adjusts the mutex_owner() and mutex_owned() functions to perform the correct comparision.
Diffstat (limited to 'include/sys')
-rw-r--r--include/sys/mutex.h21
1 files changed, 9 insertions, 12 deletions
diff --git a/include/sys/mutex.h b/include/sys/mutex.h
index ebf9151f1..659214f50 100644
--- a/include/sys/mutex.h
+++ b/include/sys/mutex.h
@@ -48,21 +48,18 @@ typedef struct {
static inline kthread_t *
mutex_owner(kmutex_t *mp)
{
- struct thread_info *owner;
-
- owner = ACCESS_ONCE(mp->m.owner);
- if (owner)
- return owner->task;
-
- return NULL;
-}
+#if defined(HAVE_MUTEX_OWNER_TASK_STRUCT)
+ return ACCESS_ONCE(mp->m.owner);
+#else
+ struct thread_info *owner = ACCESS_ONCE(mp->m.owner);
+ if (owner)
+ return owner->task;
-static inline int
-mutex_owned(kmutex_t *mp)
-{
- return (ACCESS_ONCE(mp->m.owner) == current_thread_info());
+ return NULL;
+#endif
}
+#define mutex_owned(mp) (mutex_owner(mp) == current)
#define MUTEX_HELD(mp) mutex_owned(mp)
#define MUTEX_NOT_HELD(mp) (!MUTEX_HELD(mp))
#undef mutex_init