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. */
 		;
 }

Reply via email to