mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
42990701f9
commit
84fdf6cda3
|
@ -11,7 +11,7 @@ static inline void atomic_add(int i, atomic_t *v)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
*(long *)v += i;
|
v->counter += i;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ static inline void atomic_sub(int i, atomic_t *v)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
*(long *)v -= i;
|
v->counter -= i;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,9 +29,9 @@ static inline int atomic_add_return(int i, atomic_t *v)
|
||||||
unsigned long temp, flags;
|
unsigned long temp, flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
temp = *(long *)v;
|
temp = v->counter;
|
||||||
temp += i;
|
temp += i;
|
||||||
*(long *)v = temp;
|
v->counter = temp;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
|
@ -42,9 +42,9 @@ static inline int atomic_sub_return(int i, atomic_t *v)
|
||||||
unsigned long temp, flags;
|
unsigned long temp, flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
temp = *(long *)v;
|
temp = v->counter;
|
||||||
temp -= i;
|
temp -= i;
|
||||||
*(long *)v = temp;
|
v->counter = temp;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
|
@ -55,7 +55,7 @@ static inline void atomic_clear_mask(unsigned int mask, atomic_t *v)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
*(long *)v &= ~mask;
|
v->counter &= ~mask;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
*(long *)v |= mask;
|
v->counter |= mask;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue