Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 6e0a3975a66fb14d7b5d029d3e460dc5410f1621 Mon Sep 17 00:00:00 2001
- From: Adam Oleksy <adam.oleksy@nokia.com>
- Date: Tue, 6 Sep 2016 11:53:09 +0200
- Subject: [PATCH] ARM64: add support for atomic operations
- ---
- arch/arm/include/asm/atomic.h | 43 +++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 43 insertions(+)
- diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
- index 9b79506..bc9f717 100644
- --- a/arch/arm/include/asm/atomic.h
- +++ b/arch/arm/include/asm/atomic.h
- @@ -29,6 +29,8 @@ typedef struct { volatile int counter; } atomic_t;
- #define atomic_read(v) ((v)->counter)
- #define atomic_set(v,i) (((v)->counter) = (i))
- +#define atomic64_read(v) atomic_read(v)
- +#define atomic64_set(v,i) atomic_set(v,i)
- static inline void atomic_add(int i, volatile atomic_t *v)
- {
- @@ -101,6 +103,47 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
- local_irq_restore(flags);
- }
- +#if BITS_PER_LONG == 32
- +typedef struct { volatile long long counter; } atomic64_t;
- +static inline void atomic64_sub(long long i, volatile atomic64_t *v)
- +{
- + unsigned long flags = 0;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + local_irq_restore(flags);
- +}
- +#else /* BIT_PER_LONG == 32 */
- +typedef struct { volatile long counter; } atomic64_t;
- +
- +static inline void atomic64_sub(long i, volatile atomic64_t *v)
- +{
- + unsigned long flags = 0;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + local_irq_restore(flags);
- +}
- +#endif
- +
- +static inline void atomic64_inc(volatile atomic64_t *v)
- +{
- + unsigned long flags = 0;
- +
- + local_irq_save(flags);
- + v->counter += 1;
- + local_irq_restore(flags);
- +}
- +
- +static inline void atomic64_dec(volatile atomic64_t *v)
- +{
- + unsigned long flags = 0;
- +
- + local_irq_save(flags);
- + v->counter -= 1;
- + local_irq_restore(flags);
- +}
- +
- /* Atomic operations are already serializing on ARM */
- #define smp_mb__before_atomic_dec() barrier()
- #define smp_mb__after_atomic_dec() barrier()
- --
- 2.6.2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement