Merge tag 'acpi-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-2.6-microblaze.git] / include / linux / spinlock_types.h
index b981caa..2dfa35f 100644 (file)
@@ -9,65 +9,11 @@
  * Released under the General Public License (GPL).
  */
 
-#if defined(CONFIG_SMP)
-# include <asm/spinlock_types.h>
-#else
-# include <linux/spinlock_types_up.h>
-#endif
-
-#include <linux/lockdep_types.h>
+#include <linux/spinlock_types_raw.h>
 
-typedef struct raw_spinlock {
-       arch_spinlock_t raw_lock;
-#ifdef CONFIG_DEBUG_SPINLOCK
-       unsigned int magic, owner_cpu;
-       void *owner;
-#endif
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
-       struct lockdep_map dep_map;
-#endif
-} raw_spinlock_t;
-
-#define SPINLOCK_MAGIC         0xdead4ead
-
-#define SPINLOCK_OWNER_INIT    ((void *)-1L)
-
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
-# define RAW_SPIN_DEP_MAP_INIT(lockname)               \
-       .dep_map = {                                    \
-               .name = #lockname,                      \
-               .wait_type_inner = LD_WAIT_SPIN,        \
-       }
-# define SPIN_DEP_MAP_INIT(lockname)                   \
-       .dep_map = {                                    \
-               .name = #lockname,                      \
-               .wait_type_inner = LD_WAIT_CONFIG,      \
-       }
-#else
-# define RAW_SPIN_DEP_MAP_INIT(lockname)
-# define SPIN_DEP_MAP_INIT(lockname)
-#endif
-
-#ifdef CONFIG_DEBUG_SPINLOCK
-# define SPIN_DEBUG_INIT(lockname)             \
-       .magic = SPINLOCK_MAGIC,                \
-       .owner_cpu = -1,                        \
-       .owner = SPINLOCK_OWNER_INIT,
-#else
-# define SPIN_DEBUG_INIT(lockname)
-#endif
-
-#define __RAW_SPIN_LOCK_INITIALIZER(lockname)  \
-       {                                       \
-       .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,  \
-       SPIN_DEBUG_INIT(lockname)               \
-       RAW_SPIN_DEP_MAP_INIT(lockname) }
-
-#define __RAW_SPIN_LOCK_UNLOCKED(lockname)     \
-       (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
-
-#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
+#ifndef CONFIG_PREEMPT_RT
 
+/* Non PREEMPT_RT kernels map spinlock to raw_spinlock */
 typedef struct spinlock {
        union {
                struct raw_spinlock rlock;
@@ -96,6 +42,35 @@ typedef struct spinlock {
 
 #define DEFINE_SPINLOCK(x)     spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
 
+#else /* !CONFIG_PREEMPT_RT */
+
+/* PREEMPT_RT kernels map spinlock to rt_mutex */
+#include <linux/rtmutex.h>
+
+typedef struct spinlock {
+       struct rt_mutex_base    lock;
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+       struct lockdep_map      dep_map;
+#endif
+} spinlock_t;
+
+#define __SPIN_LOCK_UNLOCKED(name)                             \
+       {                                                       \
+               .lock = __RT_MUTEX_BASE_INITIALIZER(name.lock), \
+               SPIN_DEP_MAP_INIT(name)                         \
+       }
+
+#define __LOCAL_SPIN_LOCK_UNLOCKED(name)                       \
+       {                                                       \
+               .lock = __RT_MUTEX_BASE_INITIALIZER(name.lock), \
+               LOCAL_SPIN_DEP_MAP_INIT(name)                   \
+       }
+
+#define DEFINE_SPINLOCK(name)                                  \
+       spinlock_t name = __SPIN_LOCK_UNLOCKED(name)
+
+#endif /* CONFIG_PREEMPT_RT */
+
 #include <linux/rwlock_types.h>
 
 #endif /* __LINUX_SPINLOCK_TYPES_H */