Module Name: src
Committed By: ozaki-r
Date: Wed Mar 5 06:06:42 UTC 2014
Modified Files:
src/external/cddl/osnet/dev/dtrace: dtrace_debug.c
Log Message:
Use native atomic function instead of DTrace's own one
So we don't need to implement it for each architecture.
This change is from FreeBSD (not as-is though).
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/external/cddl/osnet/dev/dtrace/dtrace_debug.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/cddl/osnet/dev/dtrace/dtrace_debug.c
diff -u src/external/cddl/osnet/dev/dtrace/dtrace_debug.c:1.7 src/external/cddl/osnet/dev/dtrace/dtrace_debug.c:1.8
--- src/external/cddl/osnet/dev/dtrace/dtrace_debug.c:1.7 Tue Mar 4 03:20:49 2014
+++ src/external/cddl/osnet/dev/dtrace/dtrace_debug.c Wed Mar 5 06:06:42 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: dtrace_debug.c,v 1.7 2014/03/04 03:20:49 ozaki-r Exp $ */
+/* $NetBSD: dtrace_debug.c,v 1.8 2014/03/05 06:06:42 ozaki-r Exp $ */
/*-
* Copyright (C) 2008 John Birrell <[email protected]>.
@@ -36,62 +36,6 @@ static char const hex2ascii_data[] = "01
#ifdef DEBUG
-#if defined(__amd64__)
-static __inline int
-dtrace_cmpset_long(volatile u_long *dst, u_long exp, u_long src)
-{
- u_char res;
-
- __asm __volatile(
- " lock ; "
- " cmpxchgq %2,%1 ; "
- " sete %0 ; "
- "1: "
- "# dtrace_cmpset_long"
- : "=a" (res), /* 0 */
- "=m" (*dst) /* 1 */
- : "r" (src), /* 2 */
- "a" (exp), /* 3 */
- "m" (*dst) /* 4 */
- : "memory");
-
- return (res);
-}
-#elif defined(__i386__)
-static __inline int
-dtrace_cmpset_long(volatile u_long *dst, u_long exp, u_long src)
-{
- u_char res;
-
- __asm __volatile(
- " lock ; "
- " cmpxchgl %2,%1 ; "
- " sete %0 ; "
- "1: "
- "# dtrace_cmpset_long"
- : "=a" (res), /* 0 */
- "=m" (*dst) /* 1 */
- : "r" (src), /* 2 */
- "a" (exp), /* 3 */
- "m" (*dst) /* 4 */
- : "memory");
-
- return (res);
-}
-#elif defined(__arm__)
-static __inline int
-dtrace_cmpset_long(volatile u_long *dst, u_long exp, u_long src)
-{
- u_char res;
- if (*dst == src) {
- res = *dst;
- *dst = src;
- return res;
- }
- return exp;
-}
-#endif
-
#define DTRACE_DEBUG_BUFR_SIZE (32 * 1024)
struct dtrace_debug_data {
@@ -108,7 +52,8 @@ static volatile u_long dtrace_debug_flag
static void
dtrace_debug_lock(int cpu)
{
- while (dtrace_cmpset_long(&dtrace_debug_flag[cpu], 0, 1) == 0)
+ /* FIXME: use atomic_cmpset_ulong once we have it */
+ while (atomic_cas_ulong(&dtrace_debug_flag[cpu], 0, 1) == 0)
/* Loop until the lock is obtained. */
;
}