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