Commit 87371e4f authored by Nick Piggin's avatar Nick Piggin Committed by Linus Torvalds

ia64: lock bitops

Convert ia64 to new bitops.
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 44086d52
...@@ -93,6 +93,38 @@ clear_bit (int nr, volatile void *addr) ...@@ -93,6 +93,38 @@ clear_bit (int nr, volatile void *addr)
} while (cmpxchg_acq(m, old, new) != old); } while (cmpxchg_acq(m, old, new) != old);
} }
/**
* clear_bit_unlock - Clears a bit in memory with release
* @nr: Bit to clear
* @addr: Address to start counting from
*
* clear_bit_unlock() is atomic and may not be reordered. It does
* contain a memory barrier suitable for unlock type operations.
*/
static __inline__ void
clear_bit_unlock (int nr, volatile void *addr)
{
__u32 mask, old, new;
volatile __u32 *m;
CMPXCHG_BUGCHECK_DECL
m = (volatile __u32 *) addr + (nr >> 5);
mask = ~(1 << (nr & 31));
do {
CMPXCHG_BUGCHECK(m);
old = *m;
new = old & mask;
} while (cmpxchg_rel(m, old, new) != old);
}
/**
* __clear_bit_unlock - Non-atomically clear a bit with release
*
* This is like clear_bit_unlock, but the implementation may use a non-atomic
* store (this one uses an atomic, however).
*/
#define __clear_bit_unlock clear_bit_unlock
/** /**
* __clear_bit - Clears a bit in memory (non-atomic version) * __clear_bit - Clears a bit in memory (non-atomic version)
*/ */
...@@ -169,6 +201,15 @@ test_and_set_bit (int nr, volatile void *addr) ...@@ -169,6 +201,15 @@ test_and_set_bit (int nr, volatile void *addr)
return (old & bit) != 0; return (old & bit) != 0;
} }
/**
* test_and_set_bit_lock - Set a bit and return its old value for lock
* @nr: Bit to set
* @addr: Address to count from
*
* This is the same as test_and_set_bit on ia64
*/
#define test_and_set_bit_lock test_and_set_bit
/** /**
* __test_and_set_bit - Set a bit and return its old value * __test_and_set_bit - Set a bit and return its old value
* @nr: Bit to set * @nr: Bit to set
...@@ -371,8 +412,6 @@ hweight64 (unsigned long x) ...@@ -371,8 +412,6 @@ hweight64 (unsigned long x)
#define hweight16(x) (unsigned int) hweight64((x) & 0xfffful) #define hweight16(x) (unsigned int) hweight64((x) & 0xfffful)
#define hweight8(x) (unsigned int) hweight64((x) & 0xfful) #define hweight8(x) (unsigned int) hweight64((x) & 0xfful)
#include <asm-generic/bitops/lock.h>
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#include <asm-generic/bitops/find.h> #include <asm-generic/bitops/find.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment