Implement the atomic_dec_if_positive() function in the LinuxKPI.

Submitted by:	Johannes Lundberg <johalun0@gmail.com>
MFC after:	1 week
Sponsored by:	Mellanox Technologies
Sponsored by:	Limelight Networks
This commit is contained in:
Hans Petter Selasky 2018-06-06 13:59:51 +00:00
parent 9e067b2256
commit 23dcf4359e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=334712

View File

@ -235,6 +235,22 @@ atomic_cmpxchg(atomic_t *v, int old, int new)
__ret.val; \
})
static inline int
atomic_dec_if_positive(atomic_t *v)
{
int retval;
int curr;
do {
curr = atomic_read(v);
retval = curr - 1;
if (unlikely(retval < 0))
break;
} while (!likely(atomic_cmpset_int(&v->counter, curr, retval)));
return (retval);
}
#define LINUX_ATOMIC_OP(op, c_op) \
static inline void atomic_##op(int i, atomic_t *v) \
{ \