From: Brian Behlendorf Date: Tue, 1 Dec 2009 18:15:27 +0000 (-0800) Subject: Add missing atomic64 compat helpers for 32-bit systems. X-Git-Tag: zfs-0.8.0-rc1~152^2~639 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5d6f6020aeeebfabd0bb5e48d8736d63b44b875;p=zfs Add missing atomic64 compat helpers for 32-bit systems. The use of these functions was added with the recent atomic work and not tested on 32-bit systems. Add the missing compat functions: atomic64_inc, atomic64_dec, atomic64_add_return, atomic64_sub_return, atomic64_inc_return, atomic64_dec_return. --- diff --git a/include/asm/atomic_compat.h b/include/asm/atomic_compat.h index c769d6248..5eaccd7e7 100644 --- a/include/asm/atomic_compat.h +++ b/include/asm/atomic_compat.h @@ -32,6 +32,38 @@ static inline void atomic64_sub(__s64 i, atomic64_t *v) spin_unlock_irqrestore(&v->lock, flags); } +#define atomic64_inc(v) (atomic64_add(1, (v))) +#define atomic64_dec(v) (atomic64_sub(1, (v))) + +static inline __s64 atomic64_add_return(__s64 i, atomic64_t *v) +{ + unsigned long flags; + __s64 ret; + + spin_lock_irqsave(&v->lock, flags); + v->val += i; + ret = v->val; + spin_unlock_irqrestore(&v->lock, flags); + + return ret; +} + +static inline __s64 atomic64_sub_return(__s64 i, atomic64_t *v) +{ + unsigned long flags; + __s64 ret; + + spin_lock_irqsave(&v->lock, flags); + v->val -= i; + ret = v->val; + spin_unlock_irqrestore(&v->lock, flags); + + return ret; +} + +#define atomic64_inc_return(v) (atomic64_add_return(1, (v))) +#define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) + static inline __s64 atomic64_read(atomic64_t *v) { unsigned long flags;