PERFORCE change 80192 for review

John Baldwin jhb at FreeBSD.org
Thu Jul 14 17:21:52 GMT 2005


http://perforce.freebsd.org/chv.cgi?CH=80192

Change 80192 by jhb at jhb_slimer on 2005/07/14 17:21:42

	Merge in the atomic_foo_ptr() changes from the ktrace branch.

Affected files ...

.. //depot/projects/smpng/sys/alpha/include/atomic.h#26 edit
.. //depot/projects/smpng/sys/amd64/include/atomic.h#21 edit
.. //depot/projects/smpng/sys/arm/include/atomic.h#14 edit
.. //depot/projects/smpng/sys/dev/hatm/if_hatm_intr.c#13 edit
.. //depot/projects/smpng/sys/i386/include/atomic.h#40 edit
.. //depot/projects/smpng/sys/ia64/include/atomic.h#10 edit
.. //depot/projects/smpng/sys/kern/kern_mutex.c#100 edit
.. //depot/projects/smpng/sys/kern/kern_shutdown.c#59 edit
.. //depot/projects/smpng/sys/powerpc/include/atomic.h#13 edit
.. //depot/projects/smpng/sys/sparc64/include/atomic.h#13 edit
.. //depot/projects/smpng/sys/sys/mutex.h#58 edit

Differences ...

==== //depot/projects/smpng/sys/alpha/include/atomic.h#26 (text+ko) ====

@@ -434,66 +434,23 @@
 #define	atomic_readandclear_long	atomic_readandclear_64
 
 /* Operations on pointers. */
-static __inline int
-atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
-{
-
-        return (atomic_cmpset_long((volatile u_long *)dst, (u_long)exp,
-            (u_long)src));
-}
-
-static __inline int
-atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src)
-{
-
-        return (atomic_cmpset_acq_long((volatile u_long *)dst, (u_long)exp,
-	    (u_long)src));
-}
-
-static __inline int
-atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src)
-{
-
-        return (atomic_cmpset_rel_long((volatile u_long *)dst, (u_long)exp,
-            (u_long)src));
-}
-
-static __inline void *
-atomic_load_acq_ptr(volatile void *p)
-{
-	return (void *)atomic_load_acq_long((volatile u_long *)p);
-}
-
-static __inline void
-atomic_store_rel_ptr(volatile void *p, void *v)
-{
-	atomic_store_rel_long((volatile u_long *)p, (u_long)v);
-}
-
-#define	ATOMIC_PTR(NAME)				\
-static __inline void					\
-atomic_##NAME##_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_long((volatile u_long *)p, v);	\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_acq_long((volatile u_long *)p, v);\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_rel_long((volatile u_long *)p, v);\
-}
-
-ATOMIC_PTR(set)
-ATOMIC_PTR(clear)
-ATOMIC_PTR(add)
-ATOMIC_PTR(subtract)
-
-#undef ATOMIC_PTR
+#define atomic_set_ptr		atomic_set_64
+#define atomic_set_acq_ptr	atomic_set_acq_64
+#define atomic_set_rel_ptr	atomic_set_rel_64
+#define atomic_clear_ptr	atomic_clear_64
+#define atomic_clear_acq_ptr	atomic_clear_acq_64
+#define atomic_clear_rel_ptr	atomic_clear_rel_64
+#define atomic_add_ptr		atomic_add_64
+#define atomic_add_acq_ptr	atomic_add_acq_64
+#define atomic_add_rel_ptr	atomic_add_rel_64
+#define atomic_subtract_ptr	atomic_subtract_64
+#define atomic_subtract_acq_ptr	atomic_subtract_acq_64
+#define atomic_subtract_rel_ptr	atomic_subtract_rel_64
+#define	atomic_cmpset_ptr	atomic_cmpset_64
+#define	atomic_cmpset_acq_ptr	atomic_cmpset_acq_64
+#define	atomic_cmpset_rel_ptr	atomic_cmpset_rel_64
+#define	atomic_load_acq_ptr	atomic_load_acq_64
+#define	atomic_store_rel_ptr	atomic_store_rel_64
+#define atomic_readandclear_ptr	atomic_readandclear_64
 
 #endif /* ! _MACHINE_ATOMIC_H_ */

==== //depot/projects/smpng/sys/amd64/include/atomic.h#21 (text+ko) ====

@@ -292,9 +292,6 @@
 #define	atomic_cmpset_acq_long		atomic_cmpset_long
 #define	atomic_cmpset_rel_long		atomic_cmpset_long
 
-#define	atomic_cmpset_acq_ptr		atomic_cmpset_ptr
-#define	atomic_cmpset_rel_ptr		atomic_cmpset_ptr
-
 /* Operations on 8-bit bytes. */
 #define	atomic_set_8		atomic_set_char
 #define	atomic_set_acq_8	atomic_set_acq_char
@@ -348,55 +345,24 @@
 #define	atomic_readandclear_32	atomic_readandclear_int
 
 /* Operations on pointers. */
-static __inline int
-atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
-{
-
-	return (atomic_cmpset_long((volatile u_long *)dst,
-	    (u_long)exp, (u_long)src));
-}
-
-static __inline void *
-atomic_load_acq_ptr(volatile void *p)
-{
-	/*
-	 * The apparently-bogus cast to intptr_t in the following is to
-	 * avoid a warning from "gcc -Wbad-function-cast".
-	 */
-	return ((void *)(intptr_t)atomic_load_acq_long((volatile u_long *)p));
-}
-
-static __inline void
-atomic_store_rel_ptr(volatile void *p, void *v)
-{
-	atomic_store_rel_long((volatile u_long *)p, (u_long)v);
-}
-
-#define	ATOMIC_PTR(NAME)				\
-static __inline void					\
-atomic_##NAME##_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_long((volatile u_long *)p, v);	\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_acq_long((volatile u_long *)p, v);\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_rel_long((volatile u_long *)p, v);\
-}
-
-ATOMIC_PTR(set)
-ATOMIC_PTR(clear)
-ATOMIC_PTR(add)
-ATOMIC_PTR(subtract)
-
-#undef ATOMIC_PTR
+#define	atomic_set_ptr		atomic_set_long
+#define	atomic_set_acq_ptr	atomic_set_acq_long
+#define	atomic_set_rel_ptr	atomic_set_rel_long
+#define	atomic_clear_ptr	atomic_clear_long
+#define	atomic_clear_acq_ptr	atomic_clear_acq_long
+#define	atomic_clear_rel_ptr	atomic_clear_rel_long
+#define	atomic_add_ptr		atomic_add_long
+#define	atomic_add_acq_ptr	atomic_add_acq_long
+#define	atomic_add_rel_ptr	atomic_add_rel_long
+#define	atomic_subtract_ptr	atomic_subtract_long
+#define	atomic_subtract_acq_ptr	atomic_subtract_acq_long
+#define	atomic_subtract_rel_ptr	atomic_subtract_rel_long
+#define	atomic_load_acq_ptr	atomic_load_acq_long
+#define	atomic_store_rel_ptr	atomic_store_rel_long
+#define	atomic_cmpset_ptr	atomic_cmpset_long
+#define	atomic_cmpset_acq_ptr	atomic_cmpset_acq_long
+#define	atomic_cmpset_rel_ptr	atomic_cmpset_rel_long
+#define	atomic_readandclear_ptr	atomic_readandclear_long
 
 #endif	/* !defined(WANT_FUNCTIONS) */
 #endif /* ! _MACHINE_ATOMIC_H_ */

==== //depot/projects/smpng/sys/arm/include/atomic.h#14 (text+ko) ====

@@ -285,13 +285,9 @@
 #define atomic_cmpset_rel_32		atomic_cmpset_32
 #define atomic_cmpset_rel_ptr		atomic_cmpset_ptr
 #define atomic_load_acq_int		atomic_load_32
-#define atomic_clear_ptr(ptr, bit)	atomic_clear_32( \
-    (volatile uint32_t *)ptr, (uint32_t)bit)
-#define atomic_store_ptr(ptr, bit)	atomic_store_32( \
-    (volatile uint32_t *)ptr, (uint32_t)bit)
-#define atomic_cmpset_ptr(dst, exp, s)	atomic_cmpset_32( \
-    (volatile uint32_t *)dst, (uint32_t)exp, (uint32_t)s)
-#define atomic_set_ptr(ptr, src)	atomic_set_32( \
-    (volatile uint32_t *)ptr,  (uint32_t)src)
+#define	atomic_clear_ptr		atomic_clear_32
+#define	atomic_store_ptr		atomic_store_32
+#define	atomic_cmpset_ptr		atomic_cmpset_32
+#define	atomic_set_ptr			atomic_set_32
 
 #endif /* _MACHINE_ATOMIC_H_ */

==== //depot/projects/smpng/sys/dev/hatm/if_hatm_intr.c#13 (text+ko) ====

@@ -115,7 +115,8 @@
 {
 	for (;;) {
 		buf->link = *list;
-		if (atomic_cmpset_ptr(list, buf->link, buf))
+		if (atomic_cmpset_ptr((uintptr_t *)list, (uintptr_t)buf->link,
+		    (uintptr_t)buf))
 			break;
 	}
 }
@@ -128,7 +129,8 @@
 	for (;;) {
 		if ((buf = sc->mbuf_list[g]) == NULL)
 			break;
-		if (atomic_cmpset_ptr(&sc->mbuf_list[g], buf, buf->link))
+		if (atomic_cmpset_ptr((uintptr_t *)&sc->mbuf_list[g],
+			(uintptr_t)buf, (uintptr_t)buf->link))
 			break;
 	}
 	if (buf == NULL) {
@@ -136,7 +138,8 @@
 		for (;;) {
 			if ((buf = sc->mbuf_list[g]) == NULL)
 				break;
-			if (atomic_cmpset_ptr(&sc->mbuf_list[g], buf, buf->link))
+			if (atomic_cmpset_ptr((uintptr_t *)&sc->mbuf_list[g],
+			    (uintptr_t)buf, (uintptr_t)buf->link))
 				break;
 		}
 	}

==== //depot/projects/smpng/sys/i386/include/atomic.h#40 (text+ko) ====

@@ -336,9 +336,6 @@
 #define	atomic_cmpset_acq_long		atomic_cmpset_long
 #define	atomic_cmpset_rel_long		atomic_cmpset_long
 
-#define	atomic_cmpset_acq_ptr		atomic_cmpset_ptr
-#define	atomic_cmpset_rel_ptr		atomic_cmpset_ptr
-
 /* Operations on 8-bit bytes. */
 #define	atomic_set_8		atomic_set_char
 #define	atomic_set_acq_8	atomic_set_acq_char
@@ -392,55 +389,24 @@
 #define	atomic_readandclear_32	atomic_readandclear_int
 
 /* Operations on pointers. */
-static __inline int
-atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
-{
-
-	return (atomic_cmpset_int((volatile u_int *)dst, (u_int)exp,
-	    (u_int)src));
-}
-
-static __inline void *
-atomic_load_acq_ptr(volatile void *p)
-{
-	/*
-	 * The apparently-bogus cast to intptr_t in the following is to
-	 * avoid a warning from "gcc -Wbad-function-cast".
-	 */
-	return ((void *)(intptr_t)atomic_load_acq_int((volatile u_int *)p));
-}
-
-static __inline void
-atomic_store_rel_ptr(volatile void *p, void *v)
-{
-	atomic_store_rel_int((volatile u_int *)p, (u_int)v);
-}
-
-#define	ATOMIC_PTR(NAME)				\
-static __inline void					\
-atomic_##NAME##_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_int((volatile u_int *)p, v);	\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_acq_int((volatile u_int *)p, v);\
-}							\
-							\
-static __inline void					\
-atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v)	\
-{							\
-	atomic_##NAME##_rel_int((volatile u_int *)p, v);\
-}
-
-ATOMIC_PTR(set)
-ATOMIC_PTR(clear)
-ATOMIC_PTR(add)
-ATOMIC_PTR(subtract)
-
-#undef ATOMIC_PTR
+#define	atomic_set_ptr		atomic_set_int
+#define	atomic_set_acq_ptr	atomic_set_acq_int
+#define	atomic_set_rel_ptr	atomic_set_rel_int
+#define	atomic_clear_ptr	atomic_clear_int
+#define	atomic_clear_acq_ptr	atomic_clear_acq_int
+#define	atomic_clear_rel_ptr	atomic_clear_rel_int
+#define	atomic_add_ptr		atomic_add_int
+#define	atomic_add_acq_ptr	atomic_add_acq_int
+#define	atomic_add_rel_ptr	atomic_add_rel_int
+#define	atomic_subtract_ptr	atomic_subtract_int
+#define	atomic_subtract_acq_ptr	atomic_subtract_acq_int
+#define	atomic_subtract_rel_ptr	atomic_subtract_rel_int
+#define	atomic_load_acq_ptr	atomic_load_acq_int
+#define	atomic_store_rel_ptr	atomic_store_rel_int
+#define	atomic_cmpset_ptr	atomic_cmpset_int
+#define	atomic_cmpset_acq_ptr	atomic_cmpset_acq_int
+#define	atomic_cmpset_rel_ptr	atomic_cmpset_rel_int
+#define	atomic_readandclear_ptr	atomic_readandclear_int
 
 #endif	/* !defined(WANT_FUNCTIONS) */
 #endif /* ! _MACHINE_ATOMIC_H_ */

==== //depot/projects/smpng/sys/ia64/include/atomic.h#10 (text+ko) ====

@@ -138,6 +138,9 @@
 
 #undef ATOMIC_STORE_LOAD
 
+#define	atomic_load_acq_ptr	atomic_load_acq_64
+#define	atomic_store_rel_ptr	atomic_store_rel_64
+
 #define	IA64_ATOMIC(sz, type, name, width, op)				\
 	static __inline type						\
 	atomic_##name##_acq_##width(volatile type *p, type v)		\
@@ -255,6 +258,19 @@
 #define	atomic_add_rel_long		atomic_add_rel_64
 #define	atomic_subtract_rel_long	atomic_subtract_rel_64
 
+#define	atomic_set_ptr			atomic_set_64
+#define	atomic_clear_ptr		atomic_clear_64
+#define	atomic_add_ptr			atomic_add_64
+#define	atomic_subtract_ptr		atomic_subtract_64
+#define	atomic_set_acq_ptr		atomic_set_acq_64
+#define	atomic_clear_acq_ptr		atomic_clear_acq_64
+#define	atomic_add_acq_ptr		atomic_add_acq_64
+#define	atomic_subtract_acq_ptr		atomic_subtract_acq_64
+#define	atomic_set_rel_ptr		atomic_set_rel_64
+#define	atomic_clear_rel_ptr		atomic_clear_rel_64
+#define	atomic_add_rel_ptr		atomic_add_rel_64
+#define	atomic_subtract_rel_ptr		atomic_subtract_rel_64
+
 #undef IA64_CMPXCHG
 
 /*
@@ -295,68 +311,13 @@
 #define	atomic_cmpset_64		atomic_cmpset_acq_64
 #define	atomic_cmpset_int		atomic_cmpset_32
 #define	atomic_cmpset_long		atomic_cmpset_64
+#define	atomic_cmpset_ptr		atomic_cmpset_64
 #define	atomic_cmpset_acq_int		atomic_cmpset_acq_32
 #define	atomic_cmpset_rel_int		atomic_cmpset_rel_32
 #define	atomic_cmpset_acq_long		atomic_cmpset_acq_64
 #define	atomic_cmpset_rel_long		atomic_cmpset_rel_64
-
-static __inline int
-atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src)
-{
-	int ret;
-	ret = atomic_cmpset_acq_long((volatile u_long *)dst, (u_long)exp,
-	    (u_long)src);
-	return (ret);
-}
-
-static __inline int
-atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src)
-{
-	int ret;
-	ret = atomic_cmpset_rel_long((volatile u_long *)dst, (u_long)exp,
-	    (u_long)src);
-	return (ret);
-}
-
-#define	atomic_cmpset_ptr		atomic_cmpset_acq_ptr
-
-static __inline void *
-atomic_load_acq_ptr(volatile void *p)
-{
-	return ((void *)atomic_load_acq_long((volatile u_long *)p));
-}
-
-static __inline void
-atomic_store_rel_ptr(volatile void *p, void *v)
-{
-	atomic_store_rel_long((volatile u_long *)p, (u_long)v);
-}
-
-#define	ATOMIC_PTR(NAME)						\
-	static __inline void						\
-	atomic_##NAME##_ptr(volatile void *p, uintptr_t v)		\
-	{								\
-		atomic_##NAME##_long((volatile u_long *)p, v);		\
-	}								\
-									\
-	static __inline void						\
-	atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v)		\
-	{								\
-		atomic_##NAME##_acq_long((volatile u_long *)p, v);	\
-	}								\
-									\
-	static __inline void						\
-	atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v)		\
-	{								\
-		atomic_##NAME##_rel_long((volatile u_long *)p, v);	\
-	}
-
-ATOMIC_PTR(set)
-ATOMIC_PTR(clear)
-ATOMIC_PTR(add)
-ATOMIC_PTR(subtract)
-
-#undef ATOMIC_PTR
+#define	atomic_cmpset_acq_ptr		atomic_cmpset_acq_64
+#define	atomic_cmpset_rel_ptr		atomic_cmpset_rel_64
 
 static __inline uint32_t
 atomic_readandclear_32(volatile uint32_t* p)

==== //depot/projects/smpng/sys/kern/kern_mutex.c#100 (text+ko) ====

@@ -417,7 +417,7 @@
 		atomic_set_ptr(&m->mtx_lock, MTX_RECURSED);
 		rval = 1;
 	} else
-		rval = _obtain_lock(m, curthread);
+		rval = _obtain_lock(m, (uintptr_t)curthread);
 
 	LOCK_LOG_TRY("LOCK", &m->mtx_object, opts, rval, file, line);
 	if (rval)
@@ -434,7 +434,7 @@
  * sleep waiting for it), or if we need to recurse on it.
  */
 void
-_mtx_lock_sleep(struct mtx *m, struct thread *td, int opts, const char *file,
+_mtx_lock_sleep(struct mtx *m, uintptr_t tid, int opts, const char *file,
     int line)
 {
 #if defined(SMP) && !defined(NO_ADAPTIVE_MUTEXES)
@@ -467,7 +467,7 @@
 #ifdef MUTEX_PROFILING
 	contested = 0;
 #endif
-	while (!_obtain_lock(m, td)) {
+	while (!_obtain_lock(m, tid)) {
 #ifdef MUTEX_PROFILING
 		contested = 1;
 		atomic_add_int(&m->mtx_contest_holding, 1);
@@ -495,7 +495,7 @@
 		 * necessary.
 		 */
 		if (v == MTX_CONTESTED) {
-			m->mtx_lock = (uintptr_t)td | MTX_CONTESTED;
+			m->mtx_lock = tid | MTX_CONTESTED;
 			turnstile_claim(&m->mtx_object);
 			break;
 		}
@@ -507,8 +507,7 @@
 		 * or the state of the MTX_RECURSED bit changed.
 		 */
 		if ((v & MTX_CONTESTED) == 0 &&
-		    !atomic_cmpset_ptr(&m->mtx_lock, (void *)v,
-			(void *)(v | MTX_CONTESTED))) {
+		    !atomic_cmpset_ptr(&m->mtx_lock, v, v | MTX_CONTESTED)) {
 			turnstile_release(&m->mtx_object);
 			cpu_spinwait();
 			continue;
@@ -542,7 +541,7 @@
 		if (!cont_logged) {
 			CTR6(KTR_CONTENTION,
 			    "contention: %p at %s:%d wants %s, taken by %s:%d",
-			    td, file, line, m->mtx_object.lo_name,
+			    (void *)tid, file, line, m->mtx_object.lo_name,
 			    WITNESS_FILE(&m->mtx_object),
 			    WITNESS_LINE(&m->mtx_object));
 			cont_logged = 1;
@@ -559,7 +558,7 @@
 	if (cont_logged) {
 		CTR4(KTR_CONTENTION,
 		    "contention end: %s acquired by %p at %s:%d",
-		    m->mtx_object.lo_name, td, file, line);
+		    m->mtx_object.lo_name, (void *)tid, file, line);
 	}
 #endif
 #ifdef MUTEX_PROFILING
@@ -578,7 +577,7 @@
  * is handled inline.
  */
 void
-_mtx_lock_spin(struct mtx *m, struct thread *td, int opts, const char *file,
+_mtx_lock_spin(struct mtx *m, uintptr_t tid, int opts, const char *file,
     int line)
 {
 	int i = 0;
@@ -590,7 +589,7 @@
 		CTR1(KTR_LOCK, "_mtx_lock_spin: %p spinning", m);
 
 	for (;;) {
-		if (_obtain_lock(m, td))
+		if (_obtain_lock(m, tid))
 			break;
 
 		/* Give interrupts a chance while we spin. */

==== //depot/projects/smpng/sys/kern/kern_shutdown.c#59 (text+ko) ====

@@ -474,7 +474,7 @@
 }
 
 #ifdef SMP
-static volatile void *panic_thread;
+static volatile uintptr_t panic_thread;
 #endif
 
 /*
@@ -492,7 +492,7 @@
 	va_list ap;
 	static char buf[256];
 #ifdef SMP
-	void *tid;
+	uintptr_t tid;
 
 	/*
 	 * We don't want multiple CPU's to panic at the same time, so we
@@ -500,7 +500,7 @@
 	 * panic_thread if we are spinning in case the panic on the first
 	 * CPU is canceled.
 	 */
-	tid = td;
+	tid = (uintptr_t)td;
 	if (panic_thread != tid)
 		while (atomic_cmpset_ptr(&panic_thread, 0, tid) == 0)
 			while (panic_thread != 0)

==== //depot/projects/smpng/sys/powerpc/include/atomic.h#13 (text+ko) ====

@@ -230,6 +230,11 @@
 #define	atomic_subtract_long(p, v)     	atomic_subtract_32((uint32_t *)p, (uint32_t)v)
 #define	atomic_readandclear_long	atomic_readandclear_32
 
+#define	atomic_set_ptr			atomic_set_32
+#define	atomic_clear_ptr		atomic_clear_32
+#define	atomic_add_ptr			atomic_add_32
+#define	atomic_subtract_ptr     	atomic_subtract_32
+
 #if 0
 
 /* See above. */
@@ -293,6 +298,15 @@
 #define	atomic_subtract_acq_long	atomic_subtract_acq_32
 #define	atomic_subtract_rel_long	atomic_subtract_rel_32
 
+#define	atomic_set_acq_ptr		atomic_set_acq_32
+#define	atomic_set_rel_ptr		atomic_set_rel_32
+#define	atomic_clear_acq_ptr		atomic_clear_acq_32
+#define	atomic_clear_rel_ptr		atomic_clear_rel_32
+#define	atomic_add_acq_ptr		atomic_add_acq_32
+#define	atomic_add_rel_ptr		atomic_add_rel_32
+#define	atomic_subtract_acq_ptr		atomic_subtract_acq_32
+#define	atomic_subtract_rel_ptr		atomic_subtract_rel_32
+
 #undef ATOMIC_ACQ_REL
 
 /*
@@ -340,6 +354,9 @@
 #define	atomic_load_acq_long	atomic_load_acq_32
 #define	atomic_store_rel_long	atomic_store_rel_32
 
+#define	atomic_load_acq_ptr	atomic_load_acq_32
+#define	atomic_store_rel_ptr	atomic_store_rel_32
+
 #undef ATOMIC_STORE_LOAD
 
 /*
@@ -397,19 +414,12 @@
 
 #define	atomic_cmpset_int	atomic_cmpset_32
 #define	atomic_cmpset_long	atomic_cmpset_32
+#define	atomic_cmpset_ptr	atomic_cmpset_32
 
 #if 0
 #define	atomic_cmpset_long_long	atomic_cmpset_64
 #endif /* 0 */
 
-static __inline int
-atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
-{
-
-	return (atomic_cmpset_32((volatile uint32_t *)dst, (uint32_t)exp,
-	    (uint32_t)src));
-}
-
 static __inline uint32_t
 atomic_cmpset_acq_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval)
 {
@@ -431,60 +441,7 @@
 #define	atomic_cmpset_rel_int	atomic_cmpset_rel_32
 #define	atomic_cmpset_acq_long	atomic_cmpset_acq_32
 #define	atomic_cmpset_rel_long	atomic_cmpset_rel_32
-
-static __inline int
-atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src)
-{
+#define	atomic_cmpset_acq_ptr	atomic_cmpset_acq_32
+#define	atomic_cmpset_rel_ptr	atomic_cmpset_rel_32
 
-        return (atomic_cmpset_acq_32((volatile uint32_t *)dst,
-	    (uint32_t)exp, (uint32_t)src));
-}
-
-static __inline int
-atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src)
-{
-
-        return (atomic_cmpset_rel_32((volatile uint32_t *)dst,
-	    (uint32_t)exp, (uint32_t)src));
-}
-
-static __inline void *
-atomic_load_acq_ptr(volatile void *p)
-{
-
-	return (void *)atomic_load_acq_32((volatile uint32_t *)p);
-}
-
-static __inline void
-atomic_store_rel_ptr(volatile void *p, void *v)
-{
-
-	atomic_store_rel_32((volatile uint32_t *)p, (uint32_t)v);
-}
-
-#define	ATOMIC_PTR(NAME)					\
-static __inline void						\
-atomic_##NAME##_ptr(volatile void *p, uintptr_t v)		\
-{								\
-	atomic_##NAME##_32((volatile uint32_t *)p, v);	\
-}								\
-								\
-static __inline void						\
-atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v)		\
-{								\
-	atomic_##NAME##_acq_32((volatile uint32_t *)p, v);	\
-}								\
-								\
-static __inline void						\
-atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v)		\
-{								\
-	atomic_##NAME##_rel_32((volatile uint32_t *)p, v);	\
-}
-
-ATOMIC_PTR(set)
-ATOMIC_PTR(clear)
-ATOMIC_PTR(add)
-ATOMIC_PTR(subtract)
-
-#undef ATOMIC_PTR
 #endif /* ! _MACHINE_ATOMIC_H_ */

==== //depot/projects/smpng/sys/sparc64/include/atomic.h#13 (text+ko) ====

@@ -275,7 +275,7 @@
 ATOMIC_GEN(long, u_long *, u_long, u_long, 64);
 ATOMIC_GEN(64, uint64_t *, uint64_t, uint64_t, 64);
 
-ATOMIC_GEN(ptr, void *, void *, uintptr_t, 64);
+ATOMIC_GEN(ptr, uintptr_t *, uintptr_t, uintptr_t, 64);
 
 #undef ATOMIC_GEN
 #undef atomic_cas

==== //depot/projects/smpng/sys/sys/mutex.h#58 (text+ko) ====

@@ -100,11 +100,11 @@
 void	mtx_destroy(struct mtx *m);
 void	mtx_sysinit(void *arg);
 void	mutex_init(void);
-void	_mtx_lock_sleep(struct mtx *m, struct thread *td, int opts,
+void	_mtx_lock_sleep(struct mtx *m, uintptr_t tid, int opts,
 	    const char *file, int line);
 void	_mtx_unlock_sleep(struct mtx *m, int opts, const char *file, int line);
 #ifdef SMP
-void	_mtx_lock_spin(struct mtx *m, struct thread *td, int opts,
+void	_mtx_lock_spin(struct mtx *m, uintptr_t tid, int opts,
 	    const char *file, int line);
 #endif
 void	_mtx_unlock_spin(struct mtx *m, int opts, const char *file, int line);
@@ -127,19 +127,19 @@
 /* Try to obtain mtx_lock once. */
 #ifndef _obtain_lock
 #define _obtain_lock(mp, tid)						\
-	atomic_cmpset_acq_ptr(&(mp)->mtx_lock, (void *)MTX_UNOWNED, (tid))
+	atomic_cmpset_acq_ptr(&(mp)->mtx_lock, MTX_UNOWNED, (tid))
 #endif
 
 /* Try to release mtx_lock if it is unrecursed and uncontested. */
 #ifndef _release_lock
 #define _release_lock(mp, tid)						\
-	atomic_cmpset_rel_ptr(&(mp)->mtx_lock, (tid), (void *)MTX_UNOWNED)
+	atomic_cmpset_rel_ptr(&(mp)->mtx_lock, (tid), MTX_UNOWNED)
 #endif
 
 /* Release mtx_lock quickly, assuming we own it. */
 #ifndef _release_lock_quick
 #define _release_lock_quick(mp)						\
-	atomic_store_rel_ptr(&(mp)->mtx_lock, (void *)MTX_UNOWNED)
+	atomic_store_rel_ptr(&(mp)->mtx_lock, MTX_UNOWNED)
 #endif
 
 /*
@@ -148,7 +148,7 @@
  */
 #ifndef _get_sleep_lock
 #define _get_sleep_lock(mp, tid, opts, file, line) do {			\
-	struct thread *_tid = (tid);					\
+	uintptr_t _tid = (uintptr_t)(tid);				\
 									\
 	if (!_obtain_lock((mp), _tid))					\
 		_mtx_lock_sleep((mp), _tid, (opts), (file), (line));	\
@@ -165,11 +165,11 @@
 #ifndef _get_spin_lock
 #ifdef SMP
 #define _get_spin_lock(mp, tid, opts, file, line) do {			\
-	struct thread *_tid = (tid);					\
+	uintptr_t _tid = (uintptr_t)(tid);				\
 									\
 	spinlock_enter();						\
 	if (!_obtain_lock((mp), _tid)) {				\
-		if ((mp)->mtx_lock == (uintptr_t)_tid)			\
+		if ((mp)->mtx_lock == _tid)				\
 			(mp)->mtx_recurse++;				\
 		else							\
 			_mtx_lock_spin((mp), _tid, (opts), (file), (line)); \
@@ -177,14 +177,14 @@
 } while (0)
 #else /* SMP */
 #define _get_spin_lock(mp, tid, opts, file, line) do {			\
-	struct thread *_tid = (tid);					\
+	uintptr_t _tid = (uintptr_t)(tid);				\
 									\
 	spinlock_enter();						\
-	if ((mp)->mtx_lock == (uintptr_t)_tid)				\
+	if ((mp)->mtx_lock == _tid)					\
 		(mp)->mtx_recurse++;					\
 	else {								\
 		KASSERT((mp)->mtx_lock == MTX_UNOWNED, ("corrupt spinlock")); \
-		(mp)->mtx_lock = (uintptr_t)_tid;			\
+		(mp)->mtx_lock = _tid;				\
 	}								\
 } while (0)
 #endif /* SMP */
@@ -196,7 +196,9 @@
  */
 #ifndef _rel_sleep_lock
 #define _rel_sleep_lock(mp, tid, opts, file, line) do {			\
-	if (!_release_lock((mp), (tid)))				\
+	uintptr_t _tid = (uintptr_t)(tid);				\
+									\
+	if (!_release_lock((mp), _tid))					\
 		_mtx_unlock_sleep((mp), (opts), (file), (line));	\
 } while (0)
 #endif


More information about the p4-projects mailing list