diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-mips/bitops.h | 63 |
1 files changed, 21 insertions, 42 deletions
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h index 1bb89c5a10ee..8cd61c197052 100644 --- a/include/asm-mips/bitops.h +++ b/include/asm-mips/bitops.h | |||
@@ -10,10 +10,13 @@ | |||
10 | #define _ASM_BITOPS_H | 10 | #define _ASM_BITOPS_H |
11 | 11 | ||
12 | #include <linux/compiler.h> | 12 | #include <linux/compiler.h> |
13 | #include <linux/irqflags.h> | ||
13 | #include <linux/types.h> | 14 | #include <linux/types.h> |
14 | #include <asm/bug.h> | 15 | #include <asm/bug.h> |
15 | #include <asm/byteorder.h> /* sigh ... */ | 16 | #include <asm/byteorder.h> /* sigh ... */ |
16 | #include <asm/cpu-features.h> | 17 | #include <asm/cpu-features.h> |
18 | #include <asm/sgidefs.h> | ||
19 | #include <asm/war.h> | ||
17 | 20 | ||
18 | #if (_MIPS_SZLONG == 32) | 21 | #if (_MIPS_SZLONG == 32) |
19 | #define SZLONG_LOG 5 | 22 | #define SZLONG_LOG 5 |
@@ -29,12 +32,6 @@ | |||
29 | #define cpu_to_lelongp(x) cpu_to_le64p((__u64 *) (x)) | 32 | #define cpu_to_lelongp(x) cpu_to_le64p((__u64 *) (x)) |
30 | #endif | 33 | #endif |
31 | 34 | ||
32 | #ifdef __KERNEL__ | ||
33 | |||
34 | #include <linux/irqflags.h> | ||
35 | #include <asm/sgidefs.h> | ||
36 | #include <asm/war.h> | ||
37 | |||
38 | /* | 35 | /* |
39 | * clear_bit() doesn't provide any barrier for the compiler. | 36 | * clear_bit() doesn't provide any barrier for the compiler. |
40 | */ | 37 | */ |
@@ -42,20 +39,6 @@ | |||
42 | #define smp_mb__after_clear_bit() smp_mb() | 39 | #define smp_mb__after_clear_bit() smp_mb() |
43 | 40 | ||
44 | /* | 41 | /* |
45 | * Only disable interrupt for kernel mode stuff to keep usermode stuff | ||
46 | * that dares to use kernel include files alive. | ||
47 | */ | ||
48 | |||
49 | #define __bi_flags unsigned long flags | ||
50 | #define __bi_local_irq_save(x) local_irq_save(x) | ||
51 | #define __bi_local_irq_restore(x) local_irq_restore(x) | ||
52 | #else | ||
53 | #define __bi_flags | ||
54 | #define __bi_local_irq_save(x) | ||
55 | #define __bi_local_irq_restore(x) | ||
56 | #endif /* __KERNEL__ */ | ||
57 | |||
58 | /* | ||
59 | * set_bit - Atomically set a bit in memory | 42 | * set_bit - Atomically set a bit in memory |
60 | * @nr: the bit to set | 43 | * @nr: the bit to set |
61 | * @addr: the address to start counting from | 44 | * @addr: the address to start counting from |
@@ -93,13 +76,13 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr) | |||
93 | } else { | 76 | } else { |
94 | volatile unsigned long *a = addr; | 77 | volatile unsigned long *a = addr; |
95 | unsigned long mask; | 78 | unsigned long mask; |
96 | __bi_flags; | 79 | unsigned long flags; |
97 | 80 | ||
98 | a += nr >> SZLONG_LOG; | 81 | a += nr >> SZLONG_LOG; |
99 | mask = 1UL << (nr & SZLONG_MASK); | 82 | mask = 1UL << (nr & SZLONG_MASK); |
100 | __bi_local_irq_save(flags); | 83 | local_irq_save(flags); |
101 | *a |= mask; | 84 | *a |= mask; |
102 | __bi_local_irq_restore(flags); | 85 | local_irq_restore(flags); |
103 | } | 86 | } |
104 | } | 87 | } |
105 | 88 | ||
@@ -141,13 +124,13 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr) | |||
141 | } else { | 124 | } else { |
142 | volatile unsigned long *a = addr; | 125 | volatile unsigned long *a = addr; |
143 | unsigned long mask; | 126 | unsigned long mask; |
144 | __bi_flags; | 127 | unsigned long flags; |
145 | 128 | ||
146 | a += nr >> SZLONG_LOG; | 129 | a += nr >> SZLONG_LOG; |
147 | mask = 1UL << (nr & SZLONG_MASK); | 130 | mask = 1UL << (nr & SZLONG_MASK); |
148 | __bi_local_irq_save(flags); | 131 | local_irq_save(flags); |
149 | *a &= ~mask; | 132 | *a &= ~mask; |
150 | __bi_local_irq_restore(flags); | 133 | local_irq_restore(flags); |
151 | } | 134 | } |
152 | } | 135 | } |
153 | 136 | ||
@@ -191,13 +174,13 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr) | |||
191 | } else { | 174 | } else { |
192 | volatile unsigned long *a = addr; | 175 | volatile unsigned long *a = addr; |
193 | unsigned long mask; | 176 | unsigned long mask; |
194 | __bi_flags; | 177 | unsigned long flags; |
195 | 178 | ||
196 | a += nr >> SZLONG_LOG; | 179 | a += nr >> SZLONG_LOG; |
197 | mask = 1UL << (nr & SZLONG_MASK); | 180 | mask = 1UL << (nr & SZLONG_MASK); |
198 | __bi_local_irq_save(flags); | 181 | local_irq_save(flags); |
199 | *a ^= mask; | 182 | *a ^= mask; |
200 | __bi_local_irq_restore(flags); | 183 | local_irq_restore(flags); |
201 | } | 184 | } |
202 | } | 185 | } |
203 | 186 | ||
@@ -258,14 +241,14 @@ static inline int test_and_set_bit(unsigned long nr, | |||
258 | volatile unsigned long *a = addr; | 241 | volatile unsigned long *a = addr; |
259 | unsigned long mask; | 242 | unsigned long mask; |
260 | int retval; | 243 | int retval; |
261 | __bi_flags; | 244 | unsigned long flags; |
262 | 245 | ||
263 | a += nr >> SZLONG_LOG; | 246 | a += nr >> SZLONG_LOG; |
264 | mask = 1UL << (nr & SZLONG_MASK); | 247 | mask = 1UL << (nr & SZLONG_MASK); |
265 | __bi_local_irq_save(flags); | 248 | local_irq_save(flags); |
266 | retval = (mask & *a) != 0; | 249 | retval = (mask & *a) != 0; |
267 | *a |= mask; | 250 | *a |= mask; |
268 | __bi_local_irq_restore(flags); | 251 | local_irq_restore(flags); |
269 | 252 | ||
270 | return retval; | 253 | return retval; |
271 | } | 254 | } |
@@ -330,14 +313,14 @@ static inline int test_and_clear_bit(unsigned long nr, | |||
330 | volatile unsigned long *a = addr; | 313 | volatile unsigned long *a = addr; |
331 | unsigned long mask; | 314 | unsigned long mask; |
332 | int retval; | 315 | int retval; |
333 | __bi_flags; | 316 | unsigned long flags; |
334 | 317 | ||
335 | a += nr >> SZLONG_LOG; | 318 | a += nr >> SZLONG_LOG; |
336 | mask = 1UL << (nr & SZLONG_MASK); | 319 | mask = 1UL << (nr & SZLONG_MASK); |
337 | __bi_local_irq_save(flags); | 320 | local_irq_save(flags); |
338 | retval = (mask & *a) != 0; | 321 | retval = (mask & *a) != 0; |
339 | *a &= ~mask; | 322 | *a &= ~mask; |
340 | __bi_local_irq_restore(flags); | 323 | local_irq_restore(flags); |
341 | 324 | ||
342 | return retval; | 325 | return retval; |
343 | } | 326 | } |
@@ -399,23 +382,19 @@ static inline int test_and_change_bit(unsigned long nr, | |||
399 | } else { | 382 | } else { |
400 | volatile unsigned long *a = addr; | 383 | volatile unsigned long *a = addr; |
401 | unsigned long mask, retval; | 384 | unsigned long mask, retval; |
402 | __bi_flags; | 385 | unsigned long flags; |
403 | 386 | ||
404 | a += nr >> SZLONG_LOG; | 387 | a += nr >> SZLONG_LOG; |
405 | mask = 1UL << (nr & SZLONG_MASK); | 388 | mask = 1UL << (nr & SZLONG_MASK); |
406 | __bi_local_irq_save(flags); | 389 | local_irq_save(flags); |
407 | retval = (mask & *a) != 0; | 390 | retval = (mask & *a) != 0; |
408 | *a ^= mask; | 391 | *a ^= mask; |
409 | __bi_local_irq_restore(flags); | 392 | local_irq_restore(flags); |
410 | 393 | ||
411 | return retval; | 394 | return retval; |
412 | } | 395 | } |
413 | } | 396 | } |
414 | 397 | ||
415 | #undef __bi_flags | ||
416 | #undef __bi_local_irq_save | ||
417 | #undef __bi_local_irq_restore | ||
418 | |||
419 | #include <asm-generic/bitops/non-atomic.h> | 398 | #include <asm-generic/bitops/non-atomic.h> |
420 | 399 | ||
421 | /* | 400 | /* |