]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.suse/rwlocks-enable-interrupts
Updated xen patches taken from suse.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.suse / rwlocks-enable-interrupts
1 From: Petr Tesarik <ptesarik@suse.cz>
2 Subject: Allow rwlocks to re-enable interrupts
3 References: bnc#387784
4 Mainline: no
5
6 Pass the original flags to rwlock arch-code, so that it can re-enable
7 interrupts if desired.
8
9 Signed-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);