Rewrite code using atomic_fcmpset_int() in the LinuxKPI.

Suggested by:	mjg@
MFC after:	1 week
Sponsored by:	Mellanox Technologies
Sponsored by:	Limelight Networks
This commit is contained in:
Hans Petter Selasky 2018-06-06 15:31:47 +00:00
parent e6e028d01f
commit 17e2a84e9a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=334718

View File

@ -239,15 +239,16 @@ static inline int
atomic_dec_if_positive(atomic_t *v)
{
int retval;
int curr;
int old;
do {
curr = atomic_read(v);
retval = curr - 1;
old = atomic_read(v);
for (;;) {
retval = old - 1;
if (unlikely(retval < 0))
break;
} while (!likely(atomic_cmpset_int(&v->counter, curr, retval)));
if (likely(atomic_fcmpset_int(&v->counter, &old, retval)))
break;
}
return (retval);
}