2012-06-17 19:52:06 +00:00
|
|
|
From 28775871f9cd9187f17ac3367a5cb1fc67df7f22 Mon Sep 17 00:00:00 2001
|
2011-11-20 00:01:55 +00:00
|
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
|
|
Date: Wed, 29 Jun 2011 19:34:01 +0200
|
2012-06-17 19:52:06 +00:00
|
|
|
Subject: [175/254] spinlock-types-separate-raw.patch
|
2011-11-20 00:01:55 +00:00
|
|
|
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
|
|
---
|
2012-06-17 19:52:06 +00:00
|
|
|
include/linux/rwlock_types.h | 4 ++
|
|
|
|
include/linux/spinlock_types.h | 74 +----------------------------------
|
2011-11-20 00:01:55 +00:00
|
|
|
include/linux/spinlock_types_nort.h | 33 ++++++++++++++++
|
2012-06-17 19:52:06 +00:00
|
|
|
include/linux/spinlock_types_raw.h | 56 ++++++++++++++++++++++++++
|
2011-11-20 00:01:55 +00:00
|
|
|
4 files changed, 95 insertions(+), 72 deletions(-)
|
2012-06-17 19:52:06 +00:00
|
|
|
create mode 100644 include/linux/spinlock_types_nort.h
|
|
|
|
create mode 100644 include/linux/spinlock_types_raw.h
|
2011-11-20 00:01:55 +00:00
|
|
|
|
2012-06-17 19:52:06 +00:00
|
|
|
diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
|
|
|
|
index cc0072e..5317cd9 100644
|
|
|
|
--- a/include/linux/rwlock_types.h
|
|
|
|
+++ b/include/linux/rwlock_types.h
|
2011-11-20 00:01:55 +00:00
|
|
|
@@ -1,6 +1,10 @@
|
|
|
|
#ifndef __LINUX_RWLOCK_TYPES_H
|
|
|
|
#define __LINUX_RWLOCK_TYPES_H
|
|
|
|
|
|
|
|
+#if !defined(__LINUX_SPINLOCK_TYPES_H)
|
|
|
|
+# error "Do not include directly, include spinlock_types.h"
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
/*
|
|
|
|
* include/linux/rwlock_types.h - generic rwlock type definitions
|
|
|
|
* and initializers
|
2012-06-17 19:52:06 +00:00
|
|
|
diff --git a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h
|
|
|
|
index 73548eb..5c8664d 100644
|
|
|
|
--- a/include/linux/spinlock_types.h
|
|
|
|
+++ b/include/linux/spinlock_types.h
|
2011-11-20 00:01:55 +00:00
|
|
|
@@ -9,79 +9,9 @@
|
|
|
|
* 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/spinlock_types_raw.h>
|
|
|
|
|
|
|
|
-#include <linux/lockdep.h>
|
|
|
|
-
|
|
|
|
-typedef struct raw_spinlock {
|
|
|
|
- arch_spinlock_t raw_lock;
|
|
|
|
-#ifdef CONFIG_GENERIC_LOCKBREAK
|
|
|
|
- unsigned int break_lock;
|
|
|
|
-#endif
|
|
|
|
-#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 SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
|
|
|
|
-#else
|
|
|
|
-# 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) \
|
|
|
|
- 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)
|
|
|
|
-
|
|
|
|
-typedef struct spinlock {
|
|
|
|
- union {
|
|
|
|
- struct raw_spinlock rlock;
|
|
|
|
-
|
|
|
|
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
|
|
|
-# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
|
|
|
|
- struct {
|
|
|
|
- u8 __padding[LOCK_PADSIZE];
|
|
|
|
- struct lockdep_map dep_map;
|
|
|
|
- };
|
|
|
|
-#endif
|
|
|
|
- };
|
|
|
|
-} spinlock_t;
|
|
|
|
-
|
|
|
|
-#define __SPIN_LOCK_INITIALIZER(lockname) \
|
|
|
|
- { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
|
|
|
|
-
|
|
|
|
-#define __SPIN_LOCK_UNLOCKED(lockname) \
|
|
|
|
- (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
|
|
|
|
-
|
|
|
|
-#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
|
|
|
|
+#include <linux/spinlock_types_nort.h>
|
|
|
|
|
|
|
|
#include <linux/rwlock_types.h>
|
|
|
|
|
2012-06-17 19:52:06 +00:00
|
|
|
diff --git a/include/linux/spinlock_types_nort.h b/include/linux/spinlock_types_nort.h
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000..f1dac1f
|
2011-11-20 00:01:55 +00:00
|
|
|
--- /dev/null
|
2012-06-17 19:52:06 +00:00
|
|
|
+++ b/include/linux/spinlock_types_nort.h
|
2011-11-20 00:01:55 +00:00
|
|
|
@@ -0,0 +1,33 @@
|
|
|
|
+#ifndef __LINUX_SPINLOCK_TYPES_NORT_H
|
|
|
|
+#define __LINUX_SPINLOCK_TYPES_NORT_H
|
|
|
|
+
|
|
|
|
+#ifndef __LINUX_SPINLOCK_TYPES_H
|
|
|
|
+#error "Do not include directly. Include spinlock_types.h instead"
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * The non RT version maps spinlocks to raw_spinlocks
|
|
|
|
+ */
|
|
|
|
+typedef struct spinlock {
|
|
|
|
+ union {
|
|
|
|
+ struct raw_spinlock rlock;
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
|
|
|
+# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
|
|
|
|
+ struct {
|
|
|
|
+ u8 __padding[LOCK_PADSIZE];
|
|
|
|
+ struct lockdep_map dep_map;
|
|
|
|
+ };
|
|
|
|
+#endif
|
|
|
|
+ };
|
|
|
|
+} spinlock_t;
|
|
|
|
+
|
|
|
|
+#define __SPIN_LOCK_INITIALIZER(lockname) \
|
|
|
|
+ { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
|
|
|
|
+
|
|
|
|
+#define __SPIN_LOCK_UNLOCKED(lockname) \
|
|
|
|
+ (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
|
|
|
|
+
|
|
|
|
+#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
|
|
|
|
+
|
|
|
|
+#endif
|
2012-06-17 19:52:06 +00:00
|
|
|
diff --git a/include/linux/spinlock_types_raw.h b/include/linux/spinlock_types_raw.h
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000..edffc4d
|
2011-11-20 00:01:55 +00:00
|
|
|
--- /dev/null
|
2012-06-17 19:52:06 +00:00
|
|
|
+++ b/include/linux/spinlock_types_raw.h
|
2011-11-20 00:01:55 +00:00
|
|
|
@@ -0,0 +1,56 @@
|
|
|
|
+#ifndef __LINUX_SPINLOCK_TYPES_RAW_H
|
|
|
|
+#define __LINUX_SPINLOCK_TYPES_RAW_H
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_SMP)
|
|
|
|
+# include <asm/spinlock_types.h>
|
|
|
|
+#else
|
|
|
|
+# include <linux/spinlock_types_up.h>
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#include <linux/lockdep.h>
|
|
|
|
+
|
|
|
|
+typedef struct raw_spinlock {
|
|
|
|
+ arch_spinlock_t raw_lock;
|
|
|
|
+#ifdef CONFIG_GENERIC_LOCKBREAK
|
|
|
|
+ unsigned int break_lock;
|
|
|
|
+#endif
|
|
|
|
+#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 SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
|
|
|
|
+#else
|
|
|
|
+# 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) \
|
|
|
|
+ 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)
|
|
|
|
+
|
|
|
|
+#endif
|