diff options
Diffstat (limited to 'linux/atomic64.c')
-rw-r--r-- | linux/atomic64.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/linux/atomic64.c b/linux/atomic64.c index 4654d092..2dbbc995 100644 --- a/linux/atomic64.c +++ b/linux/atomic64.c @@ -157,6 +157,21 @@ long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n) return val; } +bool atomic64_try_cmpxchg(atomic64_t *v, s64 *o, s64 n) +{ + unsigned long flags; + raw_spinlock_t *lock = lock_addr(v); + + raw_spin_lock_irqsave(lock, flags); + bool ret = v->counter == *o; + if (ret) + v->counter = n; + else + *o = v->counter; + raw_spin_unlock_irqrestore(lock, flags); + return ret; +} + long long atomic64_xchg(atomic64_t *v, long long new) { unsigned long flags; |