Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 83312
b: refs/heads/master
c: 5302ac5
h: refs/heads/master
v: v3
  • Loading branch information
Zoltan Menyhart authored and Tony Luck committed Feb 4, 2008
1 parent 4c7ddd6 commit 3aba4c8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 97075c4b3b7fdd6a083eea075c3a4a601f0d64d8
refs/heads/master: 5302ac5019367470e123cb91844a28d6941e6912
50 changes: 28 additions & 22 deletions trunk/include/asm-ia64/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,38 +122,40 @@ clear_bit_unlock (int nr, volatile void *addr)
}

/**
* __clear_bit_unlock - Non-atomically clear a bit with release
* __clear_bit_unlock - Non-atomically clears a bit in memory with release
* @nr: Bit to clear
* @addr: Address to start counting from
*
* This is like clear_bit_unlock, but the implementation uses a store
* Similarly to clear_bit_unlock, the implementation uses a store
* with release semantics. See also __raw_spin_unlock().
*/
static __inline__ void
__clear_bit_unlock(int nr, volatile void *addr)
__clear_bit_unlock(int nr, void *addr)
{
__u32 mask, new;
volatile __u32 *m;
__u32 * const m = (__u32 *) addr + (nr >> 5);
__u32 const new = *m & ~(1 << (nr & 31));

m = (volatile __u32 *)addr + (nr >> 5);
mask = ~(1 << (nr & 31));
new = *m & mask;
barrier();
ia64_st4_rel_nta(m, new);
}

/**
* __clear_bit - Clears a bit in memory (non-atomic version)
* @nr: the bit to clear
* @addr: the address to start counting from
*
* Unlike clear_bit(), this function is non-atomic and may be reordered.
* If it's called on the same region of memory simultaneously, the effect
* may be that only one operation succeeds.
*/
static __inline__ void
__clear_bit (int nr, volatile void *addr)
{
volatile __u32 *p = (__u32 *) addr + (nr >> 5);
__u32 m = 1 << (nr & 31);
*p &= ~m;
*((__u32 *) addr + (nr >> 5)) &= ~(1 << (nr & 31));
}

/**
* change_bit - Toggle a bit in memory
* @nr: Bit to clear
* @nr: Bit to toggle
* @addr: Address to start counting from
*
* change_bit() is atomic and may not be reordered.
Expand All @@ -178,7 +180,7 @@ change_bit (int nr, volatile void *addr)

/**
* __change_bit - Toggle a bit in memory
* @nr: the bit to set
* @nr: the bit to toggle
* @addr: the address to start counting from
*
* Unlike change_bit(), this function is non-atomic and may be reordered.
Expand All @@ -197,7 +199,7 @@ __change_bit (int nr, volatile void *addr)
* @addr: Address to count from
*
* This operation is atomic and cannot be reordered.
* It also implies a memory barrier.
* It also implies the acquisition side of the memory barrier.
*/
static __inline__ int
test_and_set_bit (int nr, volatile void *addr)
Expand Down Expand Up @@ -247,11 +249,11 @@ __test_and_set_bit (int nr, volatile void *addr)

/**
* test_and_clear_bit - Clear a bit and return its old value
* @nr: Bit to set
* @nr: Bit to clear
* @addr: Address to count from
*
* This operation is atomic and cannot be reordered.
* It also implies a memory barrier.
* It also implies the acquisition side of the memory barrier.
*/
static __inline__ int
test_and_clear_bit (int nr, volatile void *addr)
Expand All @@ -272,7 +274,7 @@ test_and_clear_bit (int nr, volatile void *addr)

/**
* __test_and_clear_bit - Clear a bit and return its old value
* @nr: Bit to set
* @nr: Bit to clear
* @addr: Address to count from
*
* This operation is non-atomic and can be reordered.
Expand All @@ -292,11 +294,11 @@ __test_and_clear_bit(int nr, volatile void * addr)

/**
* test_and_change_bit - Change a bit and return its old value
* @nr: Bit to set
* @nr: Bit to change
* @addr: Address to count from
*
* This operation is atomic and cannot be reordered.
* It also implies a memory barrier.
* It also implies the acquisition side of the memory barrier.
*/
static __inline__ int
test_and_change_bit (int nr, volatile void *addr)
Expand All @@ -315,8 +317,12 @@ test_and_change_bit (int nr, volatile void *addr)
return (old & bit) != 0;
}

/*
* WARNING: non atomic version.
/**
* __test_and_change_bit - Change a bit and return its old value
* @nr: Bit to change
* @addr: Address to count from
*
* This operation is non-atomic and can be reordered.
*/
static __inline__ int
__test_and_change_bit (int nr, void *addr)
Expand Down

0 comments on commit 3aba4c8

Please sign in to comment.