svn commit: r254393 - projects/atomic64/sys/i386/include

Jung-uk Kim jkim at FreeBSD.org
Fri Aug 16 00:14:52 UTC 2013


Author: jkim
Date: Fri Aug 16 00:14:52 2013
New Revision: 254393
URL: http://svnweb.freebsd.org/changeset/base/254393

Log:
  Restore atomic_cmpset_int() for CPU_DISABLE_CMPXCHG case as well.

Modified:
  projects/atomic64/sys/i386/include/atomic.h

Modified: projects/atomic64/sys/i386/include/atomic.h
==============================================================================
--- projects/atomic64/sys/i386/include/atomic.h	Fri Aug 16 00:04:58 2013	(r254392)
+++ projects/atomic64/sys/i386/include/atomic.h	Fri Aug 16 00:14:52 2013	(r254393)
@@ -147,16 +147,24 @@ struct __hack
 static __inline int
 atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src)
 {
-	int res;
-	register_t lock;
+	u_char res;
+
+	__asm __volatile(
+	"	pushfl ;		"
+	"	cli ;			"
+	"	cmpl	%3, %1 ;	"
+	"	jne	1f ;		"
+	"	movl	%2, %1 ;	"
+	"1:				"
+	"       sete	%0 ;		"
+	"	popfl ;			"
+	"# atomic_cmpset_int"
+	: "=q" (res),			/* 0 */
+	  "+m" (*dst)			/* 1 */
+	: "r" (src),			/* 2 */
+	  "r" (expect)			/* 3 */
+	: "memory");
 
-	res = 0;
-	ATOMIC_LOCK_I386(lock);
-	if (*dst == expect) {
-		*dst = src;
-		res = 1;
-	}
-	ATOMIC_UNLOCK_I386(lock);
 	return (res);
 }
 


More information about the svn-src-projects mailing list