diff options
| author | Nick Piggin <npiggin@suse.de> | 2007-10-18 06:06:39 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-18 17:37:29 -0400 |
| commit | 26333576fd0d0b52f6e4025c5aded97e188bdd44 (patch) | |
| tree | a9c1f9518d940a8ef10453871f2899ca18d46efa | |
| parent | 38048983e14c0fb6324175fbaf2be1baa842f5ee (diff) | |
bitops: introduce lock ops
Introduce test_and_set_bit_lock / clear_bit_unlock bitops with lock semantics.
Convert all architectures to use the generic implementation.
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-By: David Howells <dhowells@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Bryan Wu <bryan.wu@analog.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Cc: Greg Ungerer <gerg@uclinux.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Matthew Wilcox <willy@debian.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
Cc: Richard Curnow <rc@rc0.org.uk>
Cc: William Lee Irwin III <wli@holomorphy.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Andi Kleen <ak@muc.de>
Cc: Chris Zankel <chris@zankel.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
27 files changed, 96 insertions, 2 deletions
diff --git a/Documentation/atomic_ops.txt b/Documentation/atomic_ops.txt index d46306fea230..f20c10c2858f 100644 --- a/Documentation/atomic_ops.txt +++ b/Documentation/atomic_ops.txt | |||
| @@ -418,6 +418,20 @@ brothers: | |||
| 418 | */ | 418 | */ |
| 419 | smp_mb__after_clear_bit(); | 419 | smp_mb__after_clear_bit(); |
| 420 | 420 | ||
| 421 | There are two special bitops with lock barrier semantics (acquire/release, | ||
| 422 | same as spinlocks). These operate in the same way as their non-_lock/unlock | ||
| 423 | postfixed variants, except that they are to provide acquire/release semantics, | ||
| 424 | respectively. This means they can be used for bit_spin_trylock and | ||
| 425 | bit_spin_unlock type operations without specifying any more barriers. | ||
| 426 | |||
| 427 | int test_and_set_bit_lock(unsigned long nr, unsigned long *addr); | ||
| 428 | void clear_bit_unlock(unsigned long nr, unsigned long *addr); | ||
| 429 | void __clear_bit_unlock(unsigned long nr, unsigned long *addr); | ||
| 430 | |||
| 431 | The __clear_bit_unlock version is non-atomic, however it still implements | ||
| 432 | unlock barrier semantics. This can be useful if the lock itself is protecting | ||
| 433 | the other bits in the word. | ||
| 434 | |||
| 421 | Finally, there are non-atomic versions of the bitmask operations | 435 | Finally, there are non-atomic versions of the bitmask operations |
| 422 | provided. They are used in contexts where some other higher-level SMP | 436 | provided. They are used in contexts where some other higher-level SMP |
| 423 | locking scheme is being used to protect the bitmask, and thus less | 437 | locking scheme is being used to protect the bitmask, and thus less |
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index 650657c54733..4e17beba2379 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt | |||
| @@ -1479,7 +1479,8 @@ kernel. | |||
| 1479 | 1479 | ||
| 1480 | Any atomic operation that modifies some state in memory and returns information | 1480 | Any atomic operation that modifies some state in memory and returns information |
| 1481 | about the state (old or new) implies an SMP-conditional general memory barrier | 1481 | about the state (old or new) implies an SMP-conditional general memory barrier |
| 1482 | (smp_mb()) on each side of the actual operation. These include: | 1482 | (smp_mb()) on each side of the actual operation (with the exception of |
| 1483 | explicit lock operations, described later). These include: | ||
| 1483 | 1484 | ||
| 1484 | xchg(); | 1485 | xchg(); |
| 1485 | cmpxchg(); | 1486 | cmpxchg(); |
| @@ -1536,10 +1537,19 @@ If they're used for constructing a lock of some description, then they probably | |||
| 1536 | do need memory barriers as a lock primitive generally has to do things in a | 1537 | do need memory barriers as a lock primitive generally has to do things in a |
| 1537 | specific order. | 1538 | specific order. |
| 1538 | 1539 | ||
| 1539 | |||
| 1540 | Basically, each usage case has to be carefully considered as to whether memory | 1540 | Basically, each usage case has to be carefully considered as to whether memory |
| 1541 | barriers are needed or not. | 1541 | barriers are needed or not. |
| 1542 | 1542 | ||
| 1543 | The following operations are special locking primitives: | ||
| 1544 | |||
| 1545 | test_and_set_bit_lock(); | ||
| 1546 | clear_bit_unlock(); | ||
| 1547 | __clear_bit_unlock(); | ||
| 1548 | |||
| 1549 | These implement LOCK-class and UNLOCK-class operations. These should be used in | ||
| 1550 | preference to other operations when implementing locking primitives, because | ||
| 1551 | their implementations can be optimised on many architectures. | ||
| 1552 | |||
| 1543 | [!] Note that special memory barrier primitives are available for these | 1553 | [!] Note that special memory barrier primitives are available for these |
| 1544 | situations because on some CPUs the atomic instructions used imply full memory | 1554 | situations because on some CPUs the atomic instructions used imply full memory |
| 1545 | barriers, and so barrier instructions are superfluous in conjunction with them, | 1555 | barriers, and so barrier instructions are superfluous in conjunction with them, |
diff --git a/include/asm-alpha/bitops.h b/include/asm-alpha/bitops.h index 9e71201000d5..ca667d121898 100644 --- a/include/asm-alpha/bitops.h +++ b/include/asm-alpha/bitops.h | |||
| @@ -367,6 +367,7 @@ static inline unsigned int hweight8(unsigned int w) | |||
| 367 | #else | 367 | #else |
| 368 | #include <asm-generic/bitops/hweight.h> | 368 | #include <asm-generic/bitops/hweight.h> |
| 369 | #endif | 369 | #endif |
| 370 | #include <asm-generic/bitops/lock.h> | ||
| 370 | 371 | ||
| 371 | #endif /* __KERNEL__ */ | 372 | #endif /* __KERNEL__ */ |
| 372 | 373 | ||
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index b41831b6432f..52fe05895deb 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
| @@ -286,6 +286,7 @@ static inline int constant_fls(int x) | |||
| 286 | 286 | ||
| 287 | #include <asm-generic/bitops/sched.h> | 287 | #include <asm-generic/bitops/sched.h> |
| 288 | #include <asm-generic/bitops/hweight.h> | 288 | #include <asm-generic/bitops/hweight.h> |
| 289 | #include <asm-generic/bitops/lock.h> | ||
| 289 | 290 | ||
| 290 | /* | 291 | /* |
| 291 | * Ext2 is defined to use little-endian byte ordering. | 292 | * Ext2 is defined to use little-endian byte ordering. |
diff --git a/include/asm-avr32/bitops.h b/include/asm-avr32/bitops.h index 5299f8c8e11d..f3faddfd46a8 100644 --- a/include/asm-avr32/bitops.h +++ b/include/asm-avr32/bitops.h | |||
| @@ -288,6 +288,7 @@ static inline int ffs(unsigned long word) | |||
| 288 | #include <asm-generic/bitops/fls64.h> | 288 | #include <asm-generic/bitops/fls64.h> |
| 289 | #include <asm-generic/bitops/sched.h> | 289 | #include <asm-generic/bitops/sched.h> |
| 290 | #include <asm-generic/bitops/hweight.h> | 290 | #include <asm-generic/bitops/hweight.h> |
| 291 | #include <asm-generic/bitops/lock.h> | ||
| 291 | 292 | ||
| 292 | #include <asm-generic/bitops/ext2-non-atomic.h> | 293 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 293 | #include <asm-generic/bitops/ext2-atomic.h> | 294 | #include <asm-generic/bitops/ext2-atomic.h> |
diff --git a/include/asm-blackfin/bitops.h b/include/asm-blackfin/bitops.h index 27c2d0e48e1b..03ecedc1f2a7 100644 --- a/include/asm-blackfin/bitops.h +++ b/include/asm-blackfin/bitops.h | |||
| @@ -199,6 +199,7 @@ static __inline__ int __test_bit(int nr, const void *addr) | |||
| 199 | 199 | ||
| 200 | #include <asm-generic/bitops/find.h> | 200 | #include <asm-generic/bitops/find.h> |
| 201 | #include <asm-generic/bitops/hweight.h> | 201 | #include <asm-generic/bitops/hweight.h> |
| 202 | #include <asm-generic/bitops/lock.h> | ||
| 202 | 203 | ||
| 203 | #include <asm-generic/bitops/ext2-atomic.h> | 204 | #include <asm-generic/bitops/ext2-atomic.h> |
| 204 | #include <asm-generic/bitops/ext2-non-atomic.h> | 205 | #include <asm-generic/bitops/ext2-non-atomic.h> |
diff --git a/include/asm-cris/bitops.h b/include/asm-cris/bitops.h index a569065113d9..617151b9b72b 100644 --- a/include/asm-cris/bitops.h +++ b/include/asm-cris/bitops.h | |||
| @@ -154,6 +154,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr) | |||
| 154 | #include <asm-generic/bitops/fls64.h> | 154 | #include <asm-generic/bitops/fls64.h> |
| 155 | #include <asm-generic/bitops/hweight.h> | 155 | #include <asm-generic/bitops/hweight.h> |
| 156 | #include <asm-generic/bitops/find.h> | 156 | #include <asm-generic/bitops/find.h> |
| 157 | #include <asm-generic/bitops/lock.h> | ||
| 157 | 158 | ||
| 158 | #include <asm-generic/bitops/ext2-non-atomic.h> | 159 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 159 | 160 | ||
diff --git a/include/asm-frv/bitops.h b/include/asm-frv/bitops.h index f8560edf59ff..8dba74b1a254 100644 --- a/include/asm-frv/bitops.h +++ b/include/asm-frv/bitops.h | |||
| @@ -302,6 +302,7 @@ int __ilog2_u64(u64 n) | |||
| 302 | 302 | ||
| 303 | #include <asm-generic/bitops/sched.h> | 303 | #include <asm-generic/bitops/sched.h> |
| 304 | #include <asm-generic/bitops/hweight.h> | 304 | #include <asm-generic/bitops/hweight.h> |
| 305 | #include <asm-generic/bitops/lock.h> | ||
| 305 | 306 | ||
| 306 | #include <asm-generic/bitops/ext2-non-atomic.h> | 307 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 307 | 308 | ||
diff --git a/include/asm-generic/bitops.h b/include/asm-generic/bitops.h index 1f9d99193df8..e022a0f59e6b 100644 --- a/include/asm-generic/bitops.h +++ b/include/asm-generic/bitops.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <asm-generic/bitops/sched.h> | 22 | #include <asm-generic/bitops/sched.h> |
| 23 | #include <asm-generic/bitops/ffs.h> | 23 | #include <asm-generic/bitops/ffs.h> |
| 24 | #include <asm-generic/bitops/hweight.h> | 24 | #include <asm-generic/bitops/hweight.h> |
| 25 | #include <asm-generic/bitops/lock.h> | ||
| 25 | 26 | ||
| 26 | #include <asm-generic/bitops/ext2-non-atomic.h> | 27 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 27 | #include <asm-generic/bitops/ext2-atomic.h> | 28 | #include <asm-generic/bitops/ext2-atomic.h> |
diff --git a/include/asm-generic/bitops/lock.h b/include/asm-generic/bitops/lock.h new file mode 100644 index 000000000000..308a9e22c802 --- /dev/null +++ b/include/asm-generic/bitops/lock.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | #ifndef _ASM_GENERIC_BITOPS_LOCK_H_ | ||
| 2 | #define _ASM_GENERIC_BITOPS_LOCK_H_ | ||
| 3 | |||
| 4 | /** | ||
| 5 | * test_and_set_bit_lock - Set a bit and return its old value, for lock | ||
| 6 | * @nr: Bit to set | ||
| 7 | * @addr: Address to count from | ||
| 8 | * | ||
| 9 | * This operation is atomic and provides acquire barrier semantics. | ||
| 10 | * It can be used to implement bit locks. | ||
| 11 | */ | ||
| 12 | #define test_and_set_bit_lock(nr, addr) test_and_set_bit(nr, addr) | ||
| 13 | |||
| 14 | /** | ||
| 15 | * clear_bit_unlock - Clear a bit in memory, for unlock | ||
| 16 | * @nr: the bit to set | ||
| 17 | * @addr: the address to start counting from | ||
| 18 | * | ||
| 19 | * This operation is atomic and provides release barrier semantics. | ||
| 20 | */ | ||
| 21 | #define clear_bit_unlock(nr, addr) \ | ||
| 22 | do { \ | ||
| 23 | smp_mb__before_clear_bit(); \ | ||
| 24 | clear_bit(nr, addr); \ | ||
| 25 | } while (0) | ||
| 26 | |||
| 27 | /** | ||
| 28 | * __clear_bit_unlock - Clear a bit in memory, for unlock | ||
| 29 | * @nr: the bit to set | ||
| 30 | * @addr: the address to start counting from | ||
| 31 | * | ||
| 32 | * This operation is like clear_bit_unlock, however it is not atomic. | ||
| 33 | * It does provide release barrier semantics so it can be used to unlock | ||
| 34 | * a bit lock, however it would only be used if no other CPU can modify | ||
| 35 | * any bits in the memory until the lock is released (a good example is | ||
| 36 | * if the bit lock itself protects access to the other bits in the word). | ||
| 37 | */ | ||
| 38 | #define __clear_bit_unlock(nr, addr) \ | ||
| 39 | do { \ | ||
| 40 | smp_mb(); \ | ||
| 41 | __clear_bit(nr, addr); \ | ||
| 42 | } while (0) | ||
| 43 | |||
| 44 | #endif /* _ASM_GENERIC_BITOPS_LOCK_H_ */ | ||
| 45 | |||
diff --git a/include/asm-h8300/bitops.h b/include/asm-h8300/bitops.h index d76299c98b81..e64ad315656d 100644 --- a/include/asm-h8300/bitops.h +++ b/include/asm-h8300/bitops.h | |||
| @@ -194,6 +194,7 @@ static __inline__ unsigned long __ffs(unsigned long word) | |||
| 194 | #include <asm-generic/bitops/find.h> | 194 | #include <asm-generic/bitops/find.h> |
| 195 | #include <asm-generic/bitops/sched.h> | 195 | #include <asm-generic/bitops/sched.h> |
| 196 | #include <asm-generic/bitops/hweight.h> | 196 | #include <asm-generic/bitops/hweight.h> |
| 197 | #include <asm-generic/bitops/lock.h> | ||
| 197 | #include <asm-generic/bitops/ext2-non-atomic.h> | 198 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 198 | #include <asm-generic/bitops/ext2-atomic.h> | 199 | #include <asm-generic/bitops/ext2-atomic.h> |
| 199 | #include <asm-generic/bitops/minix.h> | 200 | #include <asm-generic/bitops/minix.h> |
diff --git a/include/asm-ia64/bitops.h b/include/asm-ia64/bitops.h index 6cc517e212a9..569dd62fe192 100644 --- a/include/asm-ia64/bitops.h +++ b/include/asm-ia64/bitops.h | |||
| @@ -371,6 +371,8 @@ hweight64 (unsigned long x) | |||
| 371 | #define hweight16(x) (unsigned int) hweight64((x) & 0xfffful) | 371 | #define hweight16(x) (unsigned int) hweight64((x) & 0xfffful) |
| 372 | #define hweight8(x) (unsigned int) hweight64((x) & 0xfful) | 372 | #define hweight8(x) (unsigned int) hweight64((x) & 0xfful) |
| 373 | 373 | ||
| 374 | #include <asm-generic/bitops/lock.h> | ||
| 375 | |||
| 374 | #endif /* __KERNEL__ */ | 376 | #endif /* __KERNEL__ */ |
| 375 | 377 | ||
| 376 | #include <asm-generic/bitops/find.h> | 378 | #include <asm-generic/bitops/find.h> |
diff --git a/include/asm-m32r/bitops.h b/include/asm-m32r/bitops.h index 66ab672162cd..313a02c4a889 100644 --- a/include/asm-m32r/bitops.h +++ b/include/asm-m32r/bitops.h | |||
| @@ -255,6 +255,7 @@ static __inline__ int test_and_change_bit(int nr, volatile void * addr) | |||
| 255 | #include <asm-generic/bitops/find.h> | 255 | #include <asm-generic/bitops/find.h> |
| 256 | #include <asm-generic/bitops/ffs.h> | 256 | #include <asm-generic/bitops/ffs.h> |
| 257 | #include <asm-generic/bitops/hweight.h> | 257 | #include <asm-generic/bitops/hweight.h> |
| 258 | #include <asm-generic/bitops/lock.h> | ||
| 258 | 259 | ||
| 259 | #endif /* __KERNEL__ */ | 260 | #endif /* __KERNEL__ */ |
| 260 | 261 | ||
diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h index 1a61fdb56aaf..da151f70cdc6 100644 --- a/include/asm-m68k/bitops.h +++ b/include/asm-m68k/bitops.h | |||
| @@ -314,6 +314,7 @@ static inline int fls(int x) | |||
| 314 | #include <asm-generic/bitops/fls64.h> | 314 | #include <asm-generic/bitops/fls64.h> |
| 315 | #include <asm-generic/bitops/sched.h> | 315 | #include <asm-generic/bitops/sched.h> |
| 316 | #include <asm-generic/bitops/hweight.h> | 316 | #include <asm-generic/bitops/hweight.h> |
| 317 | #include <asm-generic/bitops/lock.h> | ||
| 317 | 318 | ||
| 318 | /* Bitmap functions for the minix filesystem */ | 319 | /* Bitmap functions for the minix filesystem */ |
| 319 | 320 | ||
diff --git a/include/asm-m68knommu/bitops.h b/include/asm-m68knommu/bitops.h index 7d6075d9b5cb..b8b2770d6870 100644 --- a/include/asm-m68knommu/bitops.h +++ b/include/asm-m68knommu/bitops.h | |||
| @@ -160,6 +160,7 @@ static __inline__ int __test_bit(int nr, const volatile unsigned long * addr) | |||
| 160 | 160 | ||
| 161 | #include <asm-generic/bitops/find.h> | 161 | #include <asm-generic/bitops/find.h> |
| 162 | #include <asm-generic/bitops/hweight.h> | 162 | #include <asm-generic/bitops/hweight.h> |
| 163 | #include <asm-generic/bitops/lock.h> | ||
| 163 | 164 | ||
| 164 | static __inline__ int ext2_set_bit(int nr, volatile void * addr) | 165 | static __inline__ int ext2_set_bit(int nr, volatile void * addr) |
| 165 | { | 166 | { |
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h index 899357a72ac4..0d3373f64920 100644 --- a/include/asm-mips/bitops.h +++ b/include/asm-mips/bitops.h | |||
| @@ -556,6 +556,7 @@ static inline int ffs(int word) | |||
| 556 | 556 | ||
| 557 | #include <asm-generic/bitops/sched.h> | 557 | #include <asm-generic/bitops/sched.h> |
| 558 | #include <asm-generic/bitops/hweight.h> | 558 | #include <asm-generic/bitops/hweight.h> |
| 559 | #include <asm-generic/bitops/lock.h> | ||
| 559 | #include <asm-generic/bitops/ext2-non-atomic.h> | 560 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 560 | #include <asm-generic/bitops/ext2-atomic.h> | 561 | #include <asm-generic/bitops/ext2-atomic.h> |
| 561 | #include <asm-generic/bitops/minix.h> | 562 | #include <asm-generic/bitops/minix.h> |
diff --git a/include/asm-parisc/bitops.h b/include/asm-parisc/bitops.h index 015cb0d379bd..03ae287baf89 100644 --- a/include/asm-parisc/bitops.h +++ b/include/asm-parisc/bitops.h | |||
| @@ -208,6 +208,7 @@ static __inline__ int fls(int x) | |||
| 208 | 208 | ||
| 209 | #include <asm-generic/bitops/fls64.h> | 209 | #include <asm-generic/bitops/fls64.h> |
| 210 | #include <asm-generic/bitops/hweight.h> | 210 | #include <asm-generic/bitops/hweight.h> |
| 211 | #include <asm-generic/bitops/lock.h> | ||
| 211 | #include <asm-generic/bitops/sched.h> | 212 | #include <asm-generic/bitops/sched.h> |
| 212 | 213 | ||
| 213 | #endif /* __KERNEL__ */ | 214 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/bitops.h b/include/asm-powerpc/bitops.h index 8144a2788db6..1d4c16613d2f 100644 --- a/include/asm-powerpc/bitops.h +++ b/include/asm-powerpc/bitops.h | |||
| @@ -266,6 +266,7 @@ static __inline__ int fls(unsigned int x) | |||
| 266 | #include <asm-generic/bitops/fls64.h> | 266 | #include <asm-generic/bitops/fls64.h> |
| 267 | 267 | ||
| 268 | #include <asm-generic/bitops/hweight.h> | 268 | #include <asm-generic/bitops/hweight.h> |
| 269 | #include <asm-generic/bitops/lock.h> | ||
| 269 | 270 | ||
| 270 | #define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) | 271 | #define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) |
| 271 | unsigned long find_next_zero_bit(const unsigned long *addr, | 272 | unsigned long find_next_zero_bit(const unsigned long *addr, |
diff --git a/include/asm-s390/bitops.h b/include/asm-s390/bitops.h index f79c9b792af1..d756b34d25f3 100644 --- a/include/asm-s390/bitops.h +++ b/include/asm-s390/bitops.h | |||
| @@ -746,6 +746,7 @@ static inline int sched_find_first_bit(unsigned long *b) | |||
| 746 | #include <asm-generic/bitops/fls64.h> | 746 | #include <asm-generic/bitops/fls64.h> |
| 747 | 747 | ||
| 748 | #include <asm-generic/bitops/hweight.h> | 748 | #include <asm-generic/bitops/hweight.h> |
| 749 | #include <asm-generic/bitops/lock.h> | ||
| 749 | 750 | ||
| 750 | /* | 751 | /* |
| 751 | * ATTENTION: intel byte ordering convention for ext2 and minix !! | 752 | * ATTENTION: intel byte ordering convention for ext2 and minix !! |
diff --git a/include/asm-sh/bitops.h b/include/asm-sh/bitops.h index 1c16792cee1d..9d7021723a25 100644 --- a/include/asm-sh/bitops.h +++ b/include/asm-sh/bitops.h | |||
| @@ -137,6 +137,7 @@ static inline unsigned long __ffs(unsigned long word) | |||
| 137 | #include <asm-generic/bitops/find.h> | 137 | #include <asm-generic/bitops/find.h> |
| 138 | #include <asm-generic/bitops/ffs.h> | 138 | #include <asm-generic/bitops/ffs.h> |
| 139 | #include <asm-generic/bitops/hweight.h> | 139 | #include <asm-generic/bitops/hweight.h> |
| 140 | #include <asm-generic/bitops/lock.h> | ||
| 140 | #include <asm-generic/bitops/sched.h> | 141 | #include <asm-generic/bitops/sched.h> |
| 141 | #include <asm-generic/bitops/ext2-non-atomic.h> | 142 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 142 | #include <asm-generic/bitops/ext2-atomic.h> | 143 | #include <asm-generic/bitops/ext2-atomic.h> |
diff --git a/include/asm-sh64/bitops.h b/include/asm-sh64/bitops.h index f3bdcdb5d046..444d5ea92ce9 100644 --- a/include/asm-sh64/bitops.h +++ b/include/asm-sh64/bitops.h | |||
| @@ -136,6 +136,7 @@ static __inline__ unsigned long ffz(unsigned long word) | |||
| 136 | #include <asm-generic/bitops/__ffs.h> | 136 | #include <asm-generic/bitops/__ffs.h> |
| 137 | #include <asm-generic/bitops/find.h> | 137 | #include <asm-generic/bitops/find.h> |
| 138 | #include <asm-generic/bitops/hweight.h> | 138 | #include <asm-generic/bitops/hweight.h> |
| 139 | #include <asm-generic/bitops/lock.h> | ||
| 139 | #include <asm-generic/bitops/sched.h> | 140 | #include <asm-generic/bitops/sched.h> |
| 140 | #include <asm-generic/bitops/ffs.h> | 141 | #include <asm-generic/bitops/ffs.h> |
| 141 | #include <asm-generic/bitops/ext2-non-atomic.h> | 142 | #include <asm-generic/bitops/ext2-non-atomic.h> |
diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h index 329e696e7751..00bd0a679d70 100644 --- a/include/asm-sparc/bitops.h +++ b/include/asm-sparc/bitops.h | |||
| @@ -96,6 +96,7 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr) | |||
| 96 | #include <asm-generic/bitops/fls.h> | 96 | #include <asm-generic/bitops/fls.h> |
| 97 | #include <asm-generic/bitops/fls64.h> | 97 | #include <asm-generic/bitops/fls64.h> |
| 98 | #include <asm-generic/bitops/hweight.h> | 98 | #include <asm-generic/bitops/hweight.h> |
| 99 | #include <asm-generic/bitops/lock.h> | ||
| 99 | #include <asm-generic/bitops/find.h> | 100 | #include <asm-generic/bitops/find.h> |
| 100 | #include <asm-generic/bitops/ext2-non-atomic.h> | 101 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 101 | #include <asm-generic/bitops/ext2-atomic.h> | 102 | #include <asm-generic/bitops/ext2-atomic.h> |
diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h index 3d5e1af84723..dd4bfe993b61 100644 --- a/include/asm-sparc64/bitops.h +++ b/include/asm-sparc64/bitops.h | |||
| @@ -81,6 +81,7 @@ static inline unsigned int hweight8(unsigned int w) | |||
| 81 | #include <asm-generic/bitops/hweight.h> | 81 | #include <asm-generic/bitops/hweight.h> |
| 82 | 82 | ||
| 83 | #endif | 83 | #endif |
| 84 | #include <asm-generic/bitops/lock.h> | ||
| 84 | #endif /* __KERNEL__ */ | 85 | #endif /* __KERNEL__ */ |
| 85 | 86 | ||
| 86 | #include <asm-generic/bitops/find.h> | 87 | #include <asm-generic/bitops/find.h> |
diff --git a/include/asm-v850/bitops.h b/include/asm-v850/bitops.h index 1fa99baf4e25..8eafdb1c08ba 100644 --- a/include/asm-v850/bitops.h +++ b/include/asm-v850/bitops.h | |||
| @@ -145,6 +145,7 @@ static inline int __test_bit (int nr, const void *addr) | |||
| 145 | #include <asm-generic/bitops/find.h> | 145 | #include <asm-generic/bitops/find.h> |
| 146 | #include <asm-generic/bitops/sched.h> | 146 | #include <asm-generic/bitops/sched.h> |
| 147 | #include <asm-generic/bitops/hweight.h> | 147 | #include <asm-generic/bitops/hweight.h> |
| 148 | #include <asm-generic/bitops/lock.h> | ||
| 148 | 149 | ||
| 149 | #include <asm-generic/bitops/ext2-non-atomic.h> | 150 | #include <asm-generic/bitops/ext2-non-atomic.h> |
| 150 | #define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a) | 151 | #define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a) |
diff --git a/include/asm-x86/bitops_32.h b/include/asm-x86/bitops_32.h index a20fe9822f60..c96641f75022 100644 --- a/include/asm-x86/bitops_32.h +++ b/include/asm-x86/bitops_32.h | |||
| @@ -402,6 +402,7 @@ static inline int fls(int x) | |||
| 402 | } | 402 | } |
| 403 | 403 | ||
| 404 | #include <asm-generic/bitops/hweight.h> | 404 | #include <asm-generic/bitops/hweight.h> |
| 405 | #include <asm-generic/bitops/lock.h> | ||
| 405 | 406 | ||
| 406 | #endif /* __KERNEL__ */ | 407 | #endif /* __KERNEL__ */ |
| 407 | 408 | ||
diff --git a/include/asm-x86/bitops_64.h b/include/asm-x86/bitops_64.h index 1d7d9b4bcacb..525edf2ce5c2 100644 --- a/include/asm-x86/bitops_64.h +++ b/include/asm-x86/bitops_64.h | |||
| @@ -408,6 +408,7 @@ static __inline__ int fls(int x) | |||
| 408 | #define ARCH_HAS_FAST_MULTIPLIER 1 | 408 | #define ARCH_HAS_FAST_MULTIPLIER 1 |
| 409 | 409 | ||
| 410 | #include <asm-generic/bitops/hweight.h> | 410 | #include <asm-generic/bitops/hweight.h> |
| 411 | #include <asm-generic/bitops/lock.h> | ||
| 411 | 412 | ||
| 412 | #endif /* __KERNEL__ */ | 413 | #endif /* __KERNEL__ */ |
| 413 | 414 | ||
diff --git a/include/asm-xtensa/bitops.h b/include/asm-xtensa/bitops.h index 1c1e0d933eea..78db04cf6e48 100644 --- a/include/asm-xtensa/bitops.h +++ b/include/asm-xtensa/bitops.h | |||
| @@ -108,6 +108,7 @@ static inline int fls (unsigned int x) | |||
| 108 | #endif | 108 | #endif |
| 109 | 109 | ||
| 110 | #include <asm-generic/bitops/hweight.h> | 110 | #include <asm-generic/bitops/hweight.h> |
| 111 | #include <asm-generic/bitops/lock.h> | ||
| 111 | #include <asm-generic/bitops/sched.h> | 112 | #include <asm-generic/bitops/sched.h> |
| 112 | #include <asm-generic/bitops/minix.h> | 113 | #include <asm-generic/bitops/minix.h> |
| 113 | 114 | ||
