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>
        unsigned long flags;
 
        local_irq_save(flags);
-       *(long *)v += i;
+       v->counter += i;
        local_irq_restore(flags);
 }
 
        unsigned long flags;
 
        local_irq_save(flags);
-       *(long *)v -= i;
+       v->counter -= i;
        local_irq_restore(flags);
 }
 
        unsigned long temp, flags;
 
        local_irq_save(flags);
-       temp = *(long *)v;
+       temp = v->counter;
        temp += i;
-       *(long *)v = temp;
+       v->counter = temp;
        local_irq_restore(flags);
 
        return temp;
        unsigned long temp, flags;
 
        local_irq_save(flags);
-       temp = *(long *)v;
+       temp = v->counter;
        temp -= i;
-       *(long *)v = temp;
+       v->counter = temp;
        local_irq_restore(flags);
 
        return temp;
        unsigned long flags;
 
        local_irq_save(flags);
-       *(long *)v &= ~mask;
+       v->counter &= ~mask;
        local_irq_restore(flags);
 }
 
        unsigned long flags;
 
        local_irq_save(flags);
-       *(long *)v |= mask;
+       v->counter |= mask;
        local_irq_restore(flags);
 }