diff options
author | Matt Fleming <matt@console-pimps.org> | 2009-01-20 16:14:38 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-01-28 21:57:10 -0500 |
commit | 84fdf6cda30df72994baa2496da86787fb44cbb4 (patch) | |
tree | 808758a7b2507ea1f7ddfb07c06f3b2a41b68ed6 /arch/sh/include/asm/atomic-irq.h | |
parent | 42990701f938b9318e46102d9919ceb28e5b0e6d (diff) |
sh: Use the atomic_t "counter" member
Now that atomic_t is a generic opaque type for all architectures, it is
unwise to use intimate knowledge of its internals when manipulating it.
Instead of relying on the "counter" member being at offset 0 from the
beginning of an atomic_t, explicitly reference the member. This guards
us from any changes to the layout of the beginning of the atomic_t type.
Signed-off-by: Matt Fleming <matt@console-pimps.org>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include/asm/atomic-irq.h')
-rw-r--r-- | arch/sh/include/asm/atomic-irq.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/sh/include/asm/atomic-irq.h b/arch/sh/include/asm/atomic-irq.h index 74f7943cff6f..a0b348068cae 100644 --- a/arch/sh/include/asm/atomic-irq.h +++ b/arch/sh/include/asm/atomic-irq.h | |||
@@ -11,7 +11,7 @@ static inline void atomic_add(int i, atomic_t *v) | |||
11 | unsigned long flags; | 11 | unsigned long flags; |
12 | 12 | ||
13 | local_irq_save(flags); | 13 | local_irq_save(flags); |
14 | *(long *)v += i; | 14 | v->counter += i; |
15 | local_irq_restore(flags); | 15 | local_irq_restore(flags); |
16 | } | 16 | } |
17 | 17 | ||
@@ -20,7 +20,7 @@ static inline void atomic_sub(int i, atomic_t *v) | |||
20 | unsigned long flags; | 20 | unsigned long flags; |
21 | 21 | ||
22 | local_irq_save(flags); | 22 | local_irq_save(flags); |
23 | *(long *)v -= i; | 23 | v->counter -= i; |
24 | local_irq_restore(flags); | 24 | local_irq_restore(flags); |
25 | } | 25 | } |
26 | 26 | ||
@@ -29,9 +29,9 @@ static inline int atomic_add_return(int i, atomic_t *v) | |||
29 | unsigned long temp, flags; | 29 | unsigned long temp, flags; |
30 | 30 | ||
31 | local_irq_save(flags); | 31 | local_irq_save(flags); |
32 | temp = *(long *)v; | 32 | temp = v->counter; |
33 | temp += i; | 33 | temp += i; |
34 | *(long *)v = temp; | 34 | v->counter = temp; |
35 | local_irq_restore(flags); | 35 | local_irq_restore(flags); |
36 | 36 | ||
37 | return temp; | 37 | return temp; |
@@ -42,9 +42,9 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
42 | unsigned long temp, flags; | 42 | unsigned long temp, flags; |
43 | 43 | ||
44 | local_irq_save(flags); | 44 | local_irq_save(flags); |
45 | temp = *(long *)v; | 45 | temp = v->counter; |
46 | temp -= i; | 46 | temp -= i; |
47 | *(long *)v = temp; | 47 | v->counter = temp; |
48 | local_irq_restore(flags); | 48 | local_irq_restore(flags); |
49 | 49 | ||
50 | return temp; | 50 | return temp; |
@@ -55,7 +55,7 @@ static inline void atomic_clear_mask(unsigned int mask, atomic_t *v) | |||
55 | unsigned long flags; | 55 | unsigned long flags; |
56 | 56 | ||
57 | local_irq_save(flags); | 57 | local_irq_save(flags); |
58 | *(long *)v &= ~mask; | 58 | v->counter &= ~mask; |
59 | local_irq_restore(flags); | 59 | local_irq_restore(flags); |
60 | } | 60 | } |
61 | 61 | ||
@@ -64,7 +64,7 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v) | |||
64 | unsigned long flags; | 64 | unsigned long flags; |
65 | 65 | ||
66 | local_irq_save(flags); | 66 | local_irq_save(flags); |
67 | *(long *)v |= mask; | 67 | v->counter |= mask; |
68 | local_irq_restore(flags); | 68 | local_irq_restore(flags); |
69 | } | 69 | } |
70 | 70 | ||