Skip to content

Commit 208151b

Browse files
committed
parisc: Convert to BIT_MASK() and BIT_WORD()
Drop own open-coded implementation to set bits and use the kernel provided BIT_MASK() and BIT_WORD() macros. Signed-off-by: Helge Deller <[email protected]>
1 parent ba47d84 commit 208151b

File tree

2 files changed

+19
-34
lines changed

2 files changed

+19
-34
lines changed

arch/parisc/include/asm/bitops.h

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,6 @@
1212
#include <asm/barrier.h>
1313
#include <linux/atomic.h>
1414

15-
/*
16-
* HP-PARISC specific bit operations
17-
* for a detailed description of the functions please refer
18-
* to include/asm-i386/bitops.h or kerneldoc
19-
*/
20-
21-
#if __BITS_PER_LONG == 64
22-
#define SHIFT_PER_LONG 6
23-
#else
24-
#define SHIFT_PER_LONG 5
25-
#endif
26-
27-
#define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1))
28-
29-
3015
/* See http://marc.theaimsgroup.com/?t=108826637900003 for discussion
3116
* on use of volatile and __*_bit() (set/clear/change):
3217
* *_bit() want use of volatile.
@@ -35,45 +20,45 @@
3520

3621
static __inline__ void set_bit(int nr, volatile unsigned long * addr)
3722
{
38-
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
23+
unsigned long mask = BIT_MASK(nr);
3924
unsigned long flags;
4025

41-
addr += (nr >> SHIFT_PER_LONG);
26+
addr += BIT_WORD(nr);
4227
_atomic_spin_lock_irqsave(addr, flags);
4328
*addr |= mask;
4429
_atomic_spin_unlock_irqrestore(addr, flags);
4530
}
4631

4732
static __inline__ void clear_bit(int nr, volatile unsigned long * addr)
4833
{
49-
unsigned long mask = ~(1UL << CHOP_SHIFTCOUNT(nr));
34+
unsigned long mask = BIT_MASK(nr);
5035
unsigned long flags;
5136

52-
addr += (nr >> SHIFT_PER_LONG);
37+
addr += BIT_WORD(nr);
5338
_atomic_spin_lock_irqsave(addr, flags);
54-
*addr &= mask;
39+
*addr &= ~mask;
5540
_atomic_spin_unlock_irqrestore(addr, flags);
5641
}
5742

5843
static __inline__ void change_bit(int nr, volatile unsigned long * addr)
5944
{
60-
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
45+
unsigned long mask = BIT_MASK(nr);
6146
unsigned long flags;
6247

63-
addr += (nr >> SHIFT_PER_LONG);
48+
addr += BIT_WORD(nr);
6449
_atomic_spin_lock_irqsave(addr, flags);
6550
*addr ^= mask;
6651
_atomic_spin_unlock_irqrestore(addr, flags);
6752
}
6853

6954
static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
7055
{
71-
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
56+
unsigned long mask = BIT_MASK(nr);
7257
unsigned long old;
7358
unsigned long flags;
7459
int set;
7560

76-
addr += (nr >> SHIFT_PER_LONG);
61+
addr += BIT_WORD(nr);
7762
_atomic_spin_lock_irqsave(addr, flags);
7863
old = *addr;
7964
set = (old & mask) ? 1 : 0;
@@ -86,12 +71,12 @@ static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
8671

8772
static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
8873
{
89-
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
74+
unsigned long mask = BIT_MASK(nr);
9075
unsigned long old;
9176
unsigned long flags;
9277
int set;
9378

94-
addr += (nr >> SHIFT_PER_LONG);
79+
addr += BIT_WORD(nr);
9580
_atomic_spin_lock_irqsave(addr, flags);
9681
old = *addr;
9782
set = (old & mask) ? 1 : 0;
@@ -104,11 +89,11 @@ static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
10489

10590
static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr)
10691
{
107-
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
92+
unsigned long mask = BIT_MASK(nr);
10893
unsigned long oldbit;
10994
unsigned long flags;
11095

111-
addr += (nr >> SHIFT_PER_LONG);
96+
addr += BIT_WORD(nr);
11297
_atomic_spin_lock_irqsave(addr, flags);
11398
oldbit = *addr;
11499
*addr = oldbit ^ mask;

arch/parisc/mm/init.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ unsigned long alloc_sid(void)
750750
free_space_ids--;
751751

752752
index = find_next_zero_bit(space_id, NR_SPACE_IDS, space_id_index);
753-
space_id[index >> SHIFT_PER_LONG] |= (1L << (index & (BITS_PER_LONG - 1)));
753+
space_id[BIT_WORD(index)] |= BIT_MASK(index);
754754
space_id_index = index;
755755

756756
spin_unlock(&sid_lock);
@@ -761,16 +761,16 @@ unsigned long alloc_sid(void)
761761
void free_sid(unsigned long spaceid)
762762
{
763763
unsigned long index = spaceid >> SPACEID_SHIFT;
764-
unsigned long *dirty_space_offset;
764+
unsigned long *dirty_space_offset, mask;
765765

766-
dirty_space_offset = dirty_space_id + (index >> SHIFT_PER_LONG);
767-
index &= (BITS_PER_LONG - 1);
766+
dirty_space_offset = &dirty_space_id[BIT_WORD(index)];
767+
mask = BIT_MASK(index);
768768

769769
spin_lock(&sid_lock);
770770

771-
BUG_ON(*dirty_space_offset & (1L << index)); /* attempt to free space id twice */
771+
BUG_ON(*dirty_space_offset & mask); /* attempt to free space id twice */
772772

773-
*dirty_space_offset |= (1L << index);
773+
*dirty_space_offset |= mask;
774774
dirty_space_ids++;
775775

776776
spin_unlock(&sid_lock);

0 commit comments

Comments
 (0)