Skip to content

Commit

Permalink
tile: support atomic64_dec_if_positive()
Browse files Browse the repository at this point in the history
Use the normal cmpxchg() idiom to implement this functionality.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
  • Loading branch information
Chris Metcalf committed Mar 22, 2013
1 parent ef567f2 commit adf6d9b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/tile/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ config TILE
select MODULES_USE_ELF_RELA
select HAVE_ARCH_TRACEHOOK
select HAVE_SYSCALL_TRACEPOINTS
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE

# FIXME: investigate whether we need/want these options.
# select HAVE_IOREMAP_PROT
Expand Down
21 changes: 21 additions & 0 deletions arch/tile/include/asm/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,25 @@ static inline int atomic_read(const atomic_t *v)
#include <asm/atomic_64.h>
#endif

#ifndef __ASSEMBLY__

static inline long long atomic64_dec_if_positive(atomic64_t *v)
{
long long c, old, dec;

c = atomic64_read(v);
for (;;) {
dec = c - 1;
if (unlikely(dec < 0))
break;
old = atomic64_cmpxchg((v), c, dec);
if (likely(old == c))
break;
c = old;
}
return dec;
}

#endif /* __ASSEMBLY__ */

#endif /* _ASM_TILE_ATOMIC_H */

0 comments on commit adf6d9b

Please sign in to comment.