Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f21dda02 authored by Helge Deller's avatar Helge Deller
Browse files

parisc: implement atomic64_dec_if_positive()



Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent bbbfde78
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ config PARISC
	select BUG
	select HAVE_PERF_EVENTS
	select GENERIC_ATOMIC64 if !64BIT
	select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
	select HAVE_GENERIC_HARDIRQS
	select BROKEN_RODATA
	select GENERIC_IRQ_PROBE
+23 −0
Original line number Diff line number Diff line
@@ -229,6 +229,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)

#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)

/*
 * atomic64_dec_if_positive - decrement by 1 if old value positive
 * @v: pointer of type atomic_t
 *
 * The function returns the old value of *v minus 1, even if
 * the atomic variable, v, was not decremented.
 */
static inline long atomic64_dec_if_positive(atomic64_t *v)
{
	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 /* !CONFIG_64BIT */