]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - include/linux/rtmutex.h
Merge branch '4.0.8-rt6'
[zynq/linux.git] / include / linux / rtmutex.h
index 1abba5ce2a2f38b31b7611588faddc6f26cfe457..d5a04ea47a13d5ef046cd72f93c69623f0e2d281 100644 (file)
 
 #include <linux/linkage.h>
 #include <linux/rbtree.h>
-#include <linux/spinlock_types.h>
+#include <linux/spinlock_types_raw.h>
 
 extern int max_lock_depth; /* for sysctl */
 
+#ifdef CONFIG_DEBUG_MUTEXES
+#include <linux/debug_locks.h>
+#endif
+
 /**
  * The rt_mutex structure
  *
@@ -31,8 +35,8 @@ struct rt_mutex {
        struct rb_root          waiters;
        struct rb_node          *waiters_leftmost;
        struct task_struct      *owner;
-#ifdef CONFIG_DEBUG_RT_MUTEXES
        int                     save_state;
+#ifdef CONFIG_DEBUG_RT_MUTEXES
        const char              *name, *file;
        int                     line;
        void                    *magic;
@@ -55,22 +59,33 @@ struct hrtimer_sleeper;
 # define rt_mutex_debug_check_no_locks_held(task)      do { } while (0)
 #endif
 
+# define rt_mutex_init(mutex)                                  \
+       do {                                                    \
+               raw_spin_lock_init(&(mutex)->wait_lock);        \
+               __rt_mutex_init(mutex, #mutex);                 \
+       } while (0)
+
 #ifdef CONFIG_DEBUG_RT_MUTEXES
 # define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \
        , .name = #mutexname, .file = __FILE__, .line = __LINE__
-# define rt_mutex_init(mutex)                  __rt_mutex_init(mutex, __func__)
  extern void rt_mutex_debug_task_free(struct task_struct *tsk);
 #else
 # define __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
-# define rt_mutex_init(mutex)                  __rt_mutex_init(mutex, NULL)
 # define rt_mutex_debug_task_free(t)                   do { } while (0)
 #endif
 
-#define __RT_MUTEX_INITIALIZER(mutexname) \
-       { .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
+#define __RT_MUTEX_INITIALIZER_PLAIN(mutexname) \
+        .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
        , .waiters = RB_ROOT \
        , .owner = NULL \
-       __DEBUG_RT_MUTEX_INITIALIZER(mutexname)}
+       __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
+
+#define __RT_MUTEX_INITIALIZER(mutexname) \
+       { __RT_MUTEX_INITIALIZER_PLAIN(mutexname) }
+
+#define __RT_MUTEX_INITIALIZER_SAVE_STATE(mutexname) \
+       { __RT_MUTEX_INITIALIZER_PLAIN(mutexname)    \
+       , .save_state = 1 }
 
 #define DEFINE_RT_MUTEX(mutexname) \
        struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname)
@@ -91,6 +106,7 @@ extern void rt_mutex_destroy(struct rt_mutex *lock);
 
 extern void rt_mutex_lock(struct rt_mutex *lock);
 extern int rt_mutex_lock_interruptible(struct rt_mutex *lock);
+extern int rt_mutex_lock_killable(struct rt_mutex *lock);
 extern int rt_mutex_timed_lock(struct rt_mutex *lock,
                               struct hrtimer_sleeper *timeout);