svn commit: r334718 - head/sys/compat/linuxkpi/common/include/asm

Hans Petter Selasky hselasky at FreeBSD.org
Wed Jun 6 15:31:48 UTC 2018


Author: hselasky
Date: Wed Jun  6 15:31:47 2018
New Revision: 334718
URL: https://svnweb.freebsd.org/changeset/base/334718

Log:
  Rewrite code using atomic_fcmpset_int() in the LinuxKPI.
  
  Suggested by:	mjg@
  MFC after:	1 week
  Sponsored by:	Mellanox Technologies
  Sponsored by:	Limelight Networks

Modified:
  head/sys/compat/linuxkpi/common/include/asm/atomic.h

Modified: head/sys/compat/linuxkpi/common/include/asm/atomic.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/asm/atomic.h	Wed Jun  6 15:19:30 2018	(r334717)
+++ head/sys/compat/linuxkpi/common/include/asm/atomic.h	Wed Jun  6 15:31:47 2018	(r334718)
@@ -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);
 }
 


More information about the svn-src-head mailing list