]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.suse/rwlocks-enable-interrupts
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / rwlocks-enable-interrupts
CommitLineData
2cb7cef9
BS
1From: Petr Tesarik <ptesarik@suse.cz>
2Subject: Allow rwlocks to re-enable interrupts
3References: bnc#387784
4Mainline: no
5
6Pass the original flags to rwlock arch-code, so that it can re-enable
7interrupts if desired.
8
9Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
10
11---
12 arch/alpha/include/asm/spinlock.h | 3 +++
13 arch/arm/include/asm/spinlock.h | 3 +++
14 arch/ia64/include/asm/spinlock.h | 3 +++
15 arch/powerpc/include/asm/spinlock.h | 3 +++
16 arch/s390/include/asm/spinlock.h | 3 +++
17 arch/sh/include/asm/spinlock.h | 3 +++
18 arch/sparc/include/asm/spinlock_32.h | 2 ++
19 arch/sparc/include/asm/spinlock_64.h | 2 ++
20 include/asm-cris/arch-v32/spinlock.h | 2 ++
21 include/asm-m32r/spinlock.h | 3 +++
22 include/asm-mips/spinlock.h | 2 ++
23 include/asm-parisc/spinlock.h | 3 +++
24 include/asm-x86/spinlock.h | 3 +++
25 include/linux/spinlock.h | 6 ++++++
26 kernel/spinlock.c | 8 ++++++++
27 15 files changed, 49 insertions(+)
28
29--- linux-2.6.26.orig/arch/alpha/include/asm/spinlock.h 2008-09-26 12:13:24.000000000 +0200
30+++ linux-2.6.26/arch/alpha/include/asm/spinlock.h 2008-09-26 13:01:43.000000000 +0200
31@@ -166,6 +166,9 @@ static inline void __raw_write_unlock(ra
32 lock->lock = 0;
33 }
34
35+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
36+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
37+
38 #define _raw_spin_relax(lock) cpu_relax()
39 #define _raw_read_relax(lock) cpu_relax()
40 #define _raw_write_relax(lock) cpu_relax()
41--- linux-2.6.26.orig/arch/arm/include/asm/spinlock.h 2008-09-26 10:21:46.000000000 +0200
42+++ linux-2.6.26/arch/arm/include/asm/spinlock.h 2008-09-26 13:01:25.000000000 +0200
43@@ -217,6 +217,9 @@ static inline int __raw_read_trylock(raw
44 /* read_can_lock - would read_trylock() succeed? */
45 #define __raw_read_can_lock(x) ((x)->lock < 0x80000000)
46
47+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
48+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
49+
50 #define _raw_spin_relax(lock) cpu_relax()
51 #define _raw_read_relax(lock) cpu_relax()
52 #define _raw_write_relax(lock) cpu_relax()
53--- linux-2.6.26.orig/arch/ia64/include/asm/spinlock.h 2008-09-26 10:21:47.000000000 +0200
54+++ linux-2.6.26/arch/ia64/include/asm/spinlock.h 2008-09-26 13:02:50.000000000 +0200
55@@ -213,6 +213,9 @@ static inline int __raw_read_trylock(raw
56 return (u32)ia64_cmpxchg4_acq((__u32 *)(x), new.word, old.word) == old.word;
57 }
58
59+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
60+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
61+
62 #define _raw_spin_relax(lock) cpu_relax()
63 #define _raw_read_relax(lock) cpu_relax()
64 #define _raw_write_relax(lock) cpu_relax()
65--- linux-2.6.26.orig/arch/powerpc/include/asm/spinlock.h 2008-09-26 10:21:48.000000000 +0200
66+++ linux-2.6.26/arch/powerpc/include/asm/spinlock.h 2008-09-26 13:00:32.000000000 +0200
67@@ -287,6 +287,9 @@ static inline void __raw_write_unlock(ra
68 rw->lock = 0;
69 }
70
71+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
72+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
73+
74 #define _raw_spin_relax(lock) __spin_yield(lock)
75 #define _raw_read_relax(lock) __rw_yield(lock)
76 #define _raw_write_relax(lock) __rw_yield(lock)
77--- linux-2.6.26.orig/arch/s390/include/asm/spinlock.h 2008-09-26 10:21:49.000000000 +0200
78+++ linux-2.6.26/arch/s390/include/asm/spinlock.h 2008-09-26 13:00:02.000000000 +0200
79@@ -172,6 +172,9 @@ static inline int __raw_write_trylock(ra
80 return _raw_write_trylock_retry(rw);
81 }
82
83+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
84+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
85+
86 #define _raw_read_relax(lock) cpu_relax()
87 #define _raw_write_relax(lock) cpu_relax()
88
89--- linux-2.6.26.orig/arch/sh/include/asm/spinlock.h 2008-09-26 10:21:49.000000000 +0200
90+++ linux-2.6.26/arch/sh/include/asm/spinlock.h 2008-09-26 12:59:32.000000000 +0200
91@@ -216,6 +216,9 @@ static inline int __raw_write_trylock(ra
92 return (oldval > (RW_LOCK_BIAS - 1));
93 }
94
95+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
96+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
97+
98 #define _raw_spin_relax(lock) cpu_relax()
99 #define _raw_read_relax(lock) cpu_relax()
100 #define _raw_write_relax(lock) cpu_relax()
101--- linux-2.6.26.orig/arch/sparc/include/asm/spinlock_32.h 2008-09-26 10:21:49.000000000 +0200
102+++ linux-2.6.26/arch/sparc/include/asm/spinlock_32.h 2008-09-26 12:51:28.000000000 +0200
103@@ -179,6 +179,8 @@ static inline int __read_trylock(raw_rwl
104 #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0)
105
106 #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock)
107+#define __raw_read_lock_flags(rw, flags) __raw_read_lock(rw)
108+#define __raw_write_lock_flags(rw, flags) __raw_write_lock(rw)
109
110 #define _raw_spin_relax(lock) cpu_relax()
111 #define _raw_read_relax(lock) cpu_relax()
112--- linux-2.6.26.orig/arch/sparc/include/asm/spinlock_64.h 2008-09-26 10:21:49.000000000 +0200
113+++ linux-2.6.26/arch/sparc/include/asm/spinlock_64.h 2008-09-26 12:52:31.000000000 +0200
114@@ -232,9 +232,11 @@ static int inline __write_trylock(raw_rw
115 }
116
117 #define __raw_read_lock(p) __read_lock(p)
118+#define __raw_read_lock_flags(p, f) __read_lock(p)
119 #define __raw_read_trylock(p) __read_trylock(p)
120 #define __raw_read_unlock(p) __read_unlock(p)
121 #define __raw_write_lock(p) __write_lock(p)
122+#define __raw_write_lock_flags(p, f) __write_lock(p)
123 #define __raw_write_unlock(p) __write_unlock(p)
124 #define __raw_write_trylock(p) __write_trylock(p)
125
126--- linux-2.6.26.orig/include/asm-cris/arch-v32/spinlock.h 2008-07-13 23:51:29.000000000 +0200
127+++ linux-2.6.26/include/asm-cris/arch-v32/spinlock.h 2008-09-26 12:54:11.000000000 +0200
128@@ -121,6 +121,8 @@ static inline int __raw_write_trylock(r
129 return 1;
130 }
131
132+#define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock)
133+#define _raw_write_lock_flags(lock, flags) _raw_write_lock(lock)
134
135 #define _raw_spin_relax(lock) cpu_relax()
136 #define _raw_read_relax(lock) cpu_relax()
137--- linux-2.6.26.orig/include/asm-m32r/spinlock.h 2008-07-13 23:51:29.000000000 +0200
138+++ linux-2.6.26/include/asm-m32r/spinlock.h 2008-09-26 12:55:46.000000000 +0200
139@@ -316,6 +316,9 @@ static inline int __raw_write_trylock(ra
140 return 0;
141 }
142
143+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
144+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
145+
146 #define _raw_spin_relax(lock) cpu_relax()
147 #define _raw_read_relax(lock) cpu_relax()
148 #define _raw_write_relax(lock) cpu_relax()
149--- linux-2.6.26.orig/include/asm-mips/spinlock.h 2008-07-13 23:51:29.000000000 +0200
150+++ linux-2.6.26/include/asm-mips/spinlock.h 2008-09-26 12:56:28.000000000 +0200
151@@ -368,6 +368,8 @@ static inline int __raw_write_trylock(ra
152 return ret;
153 }
154
155+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
156+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
157
158 #define _raw_spin_relax(lock) cpu_relax()
159 #define _raw_read_relax(lock) cpu_relax()
160--- linux-2.6.26.orig/include/asm-parisc/spinlock.h 2008-07-13 23:51:29.000000000 +0200
161+++ linux-2.6.26/include/asm-parisc/spinlock.h 2008-09-26 12:57:22.000000000 +0200
162@@ -187,6 +187,9 @@ static __inline__ int __raw_write_can_lo
163 return !rw->counter;
164 }
165
166+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
167+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
168+
169 #define _raw_spin_relax(lock) cpu_relax()
170 #define _raw_read_relax(lock) cpu_relax()
171 #define _raw_write_relax(lock) cpu_relax()
172--- linux-2.6.26.orig/include/asm-x86/spinlock.h 2008-09-26 10:22:12.000000000 +0200
173+++ linux-2.6.26/include/asm-x86/spinlock.h 2008-09-26 12:58:07.000000000 +0200
174@@ -362,6 +362,9 @@ static inline void __raw_write_unlock(ra
175 : "+m" (rw->lock) : "i" (RW_LOCK_BIAS) : "memory");
176 }
177
178+#define __raw_read_lock_flags(lock, flags) __raw_read_lock(lock)
179+#define __raw_write_lock_flags(lock, flags) __raw_write_lock(lock)
180+
181 #define _raw_spin_relax(lock) cpu_relax()
182 #define _raw_read_relax(lock) cpu_relax()
183 #define _raw_write_relax(lock) cpu_relax()
184--- linux-2.6.26.orig/include/linux/spinlock.h 2008-09-26 10:22:12.000000000 +0200
185+++ linux-2.6.26/include/linux/spinlock.h 2008-09-26 13:04:17.000000000 +0200
186@@ -148,9 +148,11 @@ do { \
187 extern int _raw_spin_trylock(spinlock_t *lock);
188 extern void _raw_spin_unlock(spinlock_t *lock);
189 extern void _raw_read_lock(rwlock_t *lock);
190+#define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock)
191 extern int _raw_read_trylock(rwlock_t *lock);
192 extern void _raw_read_unlock(rwlock_t *lock);
193 extern void _raw_write_lock(rwlock_t *lock);
194+#define _raw_write_lock_flags(lock, flags) _raw_write_lock(lock)
195 extern int _raw_write_trylock(rwlock_t *lock);
196 extern void _raw_write_unlock(rwlock_t *lock);
197 #else
198@@ -160,9 +162,13 @@ do { \
199 # define _raw_spin_trylock(lock) __raw_spin_trylock(&(lock)->raw_lock)
200 # define _raw_spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock)
201 # define _raw_read_lock(rwlock) __raw_read_lock(&(rwlock)->raw_lock)
202+# define _raw_read_lock_flags(lock, flags) \
203+ __raw_read_lock_flags(&(lock)->raw_lock, *(flags))
204 # define _raw_read_trylock(rwlock) __raw_read_trylock(&(rwlock)->raw_lock)
205 # define _raw_read_unlock(rwlock) __raw_read_unlock(&(rwlock)->raw_lock)
206 # define _raw_write_lock(rwlock) __raw_write_lock(&(rwlock)->raw_lock)
207+# define _raw_write_lock_flags(lock, flags) \
208+ __raw_write_lock_flags(&(lock)->raw_lock, *(flags))
209 # define _raw_write_trylock(rwlock) __raw_write_trylock(&(rwlock)->raw_lock)
210 # define _raw_write_unlock(rwlock) __raw_write_unlock(&(rwlock)->raw_lock)
211 #endif
212--- linux-2.6.26.orig/kernel/spinlock.c 2008-09-26 10:22:13.000000000 +0200
213+++ linux-2.6.26/kernel/spinlock.c 2008-09-26 13:10:35.000000000 +0200
214@@ -121,7 +121,11 @@ unsigned long __lockfunc _read_lock_irqs
215 local_irq_save(flags);
216 preempt_disable();
217 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
218+#ifdef CONFIG_LOCKDEP
219 LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
220+#else
221+ _raw_read_lock_flags(lock, &flags);
222+#endif
223 return flags;
224 }
225 EXPORT_SYMBOL(_read_lock_irqsave);
226@@ -151,7 +155,11 @@ unsigned long __lockfunc _write_lock_irq
227 local_irq_save(flags);
228 preempt_disable();
229 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
230+#ifdef CONFIG_LOCKDEP
231 LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
232+#else
233+ _raw_write_lock_flags(lock, &flags);
234+#endif
235 return flags;
236 }
237 EXPORT_SYMBOL(_write_lock_irqsave);