1 From 24141c0e59b1e9150f7f80670c6f33f8e80faffc Mon Sep 17 00:00:00 2001
2 From: Thomas Gleixner <tglx@linutronix.de>
3 Date: Wed, 29 Jun 2011 19:34:01 +0200
4 Subject: [PATCH 121/366] spinlock: Split the lock types header
6 Split raw_spinlock into its own file and the remaining spinlock_t into
7 its own non-RT header. The non-RT header will be replaced later by sleeping
10 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
12 include/linux/rwlock_types.h | 4 ++
13 include/linux/spinlock_types.h | 74 +------------------------------------
14 include/linux/spinlock_types_nort.h | 33 +++++++++++++++++
15 include/linux/spinlock_types_raw.h | 56 ++++++++++++++++++++++++++++
16 4 files changed, 95 insertions(+), 72 deletions(-)
17 create mode 100644 include/linux/spinlock_types_nort.h
18 create mode 100644 include/linux/spinlock_types_raw.h
20 diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
21 index cc0072e..5317cd9 100644
22 --- a/include/linux/rwlock_types.h
23 +++ b/include/linux/rwlock_types.h
25 #ifndef __LINUX_RWLOCK_TYPES_H
26 #define __LINUX_RWLOCK_TYPES_H
28 +#if !defined(__LINUX_SPINLOCK_TYPES_H)
29 +# error "Do not include directly, include spinlock_types.h"
33 * include/linux/rwlock_types.h - generic rwlock type definitions
35 diff --git a/include/linux/spinlock_types.h b/include/linux/spinlock_types.h
36 index 73548eb..5c8664d 100644
37 --- a/include/linux/spinlock_types.h
38 +++ b/include/linux/spinlock_types.h
40 * Released under the General Public License (GPL).
43 -#if defined(CONFIG_SMP)
44 -# include <asm/spinlock_types.h>
46 -# include <linux/spinlock_types_up.h>
48 +#include <linux/spinlock_types_raw.h>
50 -#include <linux/lockdep.h>
52 -typedef struct raw_spinlock {
53 - arch_spinlock_t raw_lock;
54 -#ifdef CONFIG_GENERIC_LOCKBREAK
55 - unsigned int break_lock;
57 -#ifdef CONFIG_DEBUG_SPINLOCK
58 - unsigned int magic, owner_cpu;
61 -#ifdef CONFIG_DEBUG_LOCK_ALLOC
62 - struct lockdep_map dep_map;
66 -#define SPINLOCK_MAGIC 0xdead4ead
68 -#define SPINLOCK_OWNER_INIT ((void *)-1L)
70 -#ifdef CONFIG_DEBUG_LOCK_ALLOC
71 -# define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
73 -# define SPIN_DEP_MAP_INIT(lockname)
76 -#ifdef CONFIG_DEBUG_SPINLOCK
77 -# define SPIN_DEBUG_INIT(lockname) \
78 - .magic = SPINLOCK_MAGIC, \
80 - .owner = SPINLOCK_OWNER_INIT,
82 -# define SPIN_DEBUG_INIT(lockname)
85 -#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
87 - .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
88 - SPIN_DEBUG_INIT(lockname) \
89 - SPIN_DEP_MAP_INIT(lockname) }
91 -#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \
92 - (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
94 -#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)
96 -typedef struct spinlock {
98 - struct raw_spinlock rlock;
100 -#ifdef CONFIG_DEBUG_LOCK_ALLOC
101 -# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
103 - u8 __padding[LOCK_PADSIZE];
104 - struct lockdep_map dep_map;
110 -#define __SPIN_LOCK_INITIALIZER(lockname) \
111 - { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
113 -#define __SPIN_LOCK_UNLOCKED(lockname) \
114 - (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
116 -#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
117 +#include <linux/spinlock_types_nort.h>
119 #include <linux/rwlock_types.h>
121 diff --git a/include/linux/spinlock_types_nort.h b/include/linux/spinlock_types_nort.h
123 index 0000000..f1dac1f
125 +++ b/include/linux/spinlock_types_nort.h
127 +#ifndef __LINUX_SPINLOCK_TYPES_NORT_H
128 +#define __LINUX_SPINLOCK_TYPES_NORT_H
130 +#ifndef __LINUX_SPINLOCK_TYPES_H
131 +#error "Do not include directly. Include spinlock_types.h instead"
135 + * The non RT version maps spinlocks to raw_spinlocks
137 +typedef struct spinlock {
139 + struct raw_spinlock rlock;
141 +#ifdef CONFIG_DEBUG_LOCK_ALLOC
142 +# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
144 + u8 __padding[LOCK_PADSIZE];
145 + struct lockdep_map dep_map;
151 +#define __SPIN_LOCK_INITIALIZER(lockname) \
152 + { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
154 +#define __SPIN_LOCK_UNLOCKED(lockname) \
155 + (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
157 +#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
160 diff --git a/include/linux/spinlock_types_raw.h b/include/linux/spinlock_types_raw.h
162 index 0000000..edffc4d
164 +++ b/include/linux/spinlock_types_raw.h
166 +#ifndef __LINUX_SPINLOCK_TYPES_RAW_H
167 +#define __LINUX_SPINLOCK_TYPES_RAW_H
169 +#if defined(CONFIG_SMP)
170 +# include <asm/spinlock_types.h>
172 +# include <linux/spinlock_types_up.h>
175 +#include <linux/lockdep.h>
177 +typedef struct raw_spinlock {
178 + arch_spinlock_t raw_lock;
179 +#ifdef CONFIG_GENERIC_LOCKBREAK
180 + unsigned int break_lock;
182 +#ifdef CONFIG_DEBUG_SPINLOCK
183 + unsigned int magic, owner_cpu;
186 +#ifdef CONFIG_DEBUG_LOCK_ALLOC
187 + struct lockdep_map dep_map;
191 +#define SPINLOCK_MAGIC 0xdead4ead
193 +#define SPINLOCK_OWNER_INIT ((void *)-1L)
195 +#ifdef CONFIG_DEBUG_LOCK_ALLOC
196 +# define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
198 +# define SPIN_DEP_MAP_INIT(lockname)
201 +#ifdef CONFIG_DEBUG_SPINLOCK
202 +# define SPIN_DEBUG_INIT(lockname) \
203 + .magic = SPINLOCK_MAGIC, \
205 + .owner = SPINLOCK_OWNER_INIT,
207 +# define SPIN_DEBUG_INIT(lockname)
210 +#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \
212 + .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
213 + SPIN_DEBUG_INIT(lockname) \
214 + SPIN_DEP_MAP_INIT(lockname) }
216 +#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \
217 + (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname)
219 +#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x)