PERFORCE change 74108 for review
John Baldwin
jhb at FreeBSD.org
Wed Mar 30 07:17:43 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=74108
Change 74108 by jhb at jhb_slimer on 2005/03/30 15:17:00
Revert the changes to atomic_ptr ops. They need to operate on
uintptr_t's instead because gcc is applying the volatile to what
mtx_lock points to rather than mtx_lock's value when mtx_lock is
a void *.
Affected files ...
.. //depot/projects/smpng/sys/alpha/include/atomic.h#15 edit
.. //depot/projects/smpng/sys/amd64/include/atomic.h#11 edit
.. //depot/projects/smpng/sys/ia64/include/atomic.h#6 edit
.. //depot/projects/smpng/sys/kern/kern_fork.c#92 edit
.. //depot/projects/smpng/sys/kern/kern_mutex.c#93 edit
.. //depot/projects/smpng/sys/kern/sched_4bsd.c#47 edit
.. //depot/projects/smpng/sys/kern/sched_ule.c#54 edit
.. //depot/projects/smpng/sys/kern/subr_witness.c#129 edit
.. //depot/projects/smpng/sys/powerpc/include/atomic.h#9 edit
.. //depot/projects/smpng/sys/sparc64/include/atomic.h#9 edit
.. //depot/projects/smpng/sys/sys/_mutex.h#14 edit
.. //depot/projects/smpng/sys/sys/mutex.h#50 edit
Differences ...
==== //depot/projects/smpng/sys/alpha/include/atomic.h#15 (text+ko) ====
@@ -381,7 +381,7 @@
#define atomic_cmpset_long atomic_cmpset_64
static __inline int
-atomic_cmpset_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_long((volatile u_long *)dst, (u_long)exp,
@@ -430,7 +430,7 @@
#define atomic_cmpset_rel_long atomic_cmpset_rel_64
static __inline int
-atomic_cmpset_acq_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_acq_long((volatile u_long *)dst, (u_long)exp,
@@ -438,7 +438,7 @@
}
static __inline int
-atomic_cmpset_rel_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_rel_long((volatile u_long *)dst, (u_long)exp,
@@ -446,32 +446,32 @@
}
static __inline void *
-atomic_load_acq_ptr(volatile void **p)
+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_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##_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_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_ptr(volatile void *p, uintptr_t v) \
{ \
atomic_##NAME##_rel_long((volatile u_long *)p, v);\
}
==== //depot/projects/smpng/sys/amd64/include/atomic.h#11 (text+ko) ====
@@ -356,26 +356,26 @@
}
static __inline void
-atomic_store_rel_ptr(volatile void **p, void *v)
+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##_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_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_ptr(volatile void *p, uintptr_t v) \
{ \
atomic_##NAME##_rel_long((volatile u_long *)p, v);\
}
==== //depot/projects/smpng/sys/ia64/include/atomic.h#6 (text+ko) ====
@@ -301,7 +301,7 @@
#define atomic_cmpset_rel_long atomic_cmpset_rel_64
static __inline int
-atomic_cmpset_acq_ptr(volatile void **dst, void *exp, void *src)
+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,
@@ -310,7 +310,7 @@
}
static __inline int
-atomic_cmpset_rel_ptr(volatile void **dst, void *exp, void *src)
+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,
@@ -321,32 +321,32 @@
#define atomic_cmpset_ptr atomic_cmpset_acq_ptr
static __inline void *
-atomic_load_acq_ptr(volatile void **p)
+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_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##_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_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_ptr(volatile void *p, uintptr_t v) \
{ \
atomic_##NAME##_rel_long((volatile u_long *)p, v); \
}
==== //depot/projects/smpng/sys/kern/kern_fork.c#92 (text+ko) ====
@@ -762,7 +762,7 @@
td->td_oncpu = PCPU_GET(cpuid);
KASSERT(p->p_state == PRS_NORMAL, ("executing process is still new"));
- sched_lock.mtx_lock = td;
+ sched_lock.mtx_lock = (uintptr_t)td;
mtx_assert(&sched_lock, MA_OWNED | MA_NOTRECURSED);
cpu_critical_fork_exit();
CTR4(KTR_PROC, "fork_exit: new thread %p (kse %p, pid %d, %s)",
==== //depot/projects/smpng/sys/kern/kern_mutex.c#93 (text+ko) ====
@@ -86,10 +86,10 @@
/*
* Internal utility macros.
*/
-#define mtx_unowned(m) ((m)->mtx_lock == (void *)MTX_UNOWNED)
+#define mtx_unowned(m) ((m)->mtx_lock == MTX_UNOWNED)
#define mtx_owner(m) (mtx_unowned((m)) ? NULL \
- : (struct thread *)((uintptr_t)(m)->mtx_lock & ~MTX_FLAGMASK))
+ : (struct thread *)((m)->mtx_lock & ~MTX_FLAGMASK))
/*
* Lock classes for sleep and spin mutexes.
@@ -473,7 +473,7 @@
atomic_add_int(&m->mtx_contest_holding, 1);
#endif
turnstile_lock(&m->mtx_object);
- v = (uintptr_t)m->mtx_lock;
+ v = m->mtx_lock;
/*
* Check if the lock has been released while spinning for
@@ -609,7 +609,7 @@
DELAY(1);
else if (!kdb_active) {
printf("spin lock %s held by %p for > 5 seconds\n",
- m->mtx_object.lo_name, m->mtx_lock);
+ m->mtx_object.lo_name, (void *)m->mtx_lock);
#ifdef WITNESS
witness_display_spinlock(&m->mtx_object,
mtx_owner(m));
@@ -683,7 +683,7 @@
if (LOCK_LOG_TEST(&m->mtx_object, opts))
CTR1(KTR_LOCK, "_mtx_unlock_sleep: %p not held", m);
} else {
- m->mtx_lock = (void *)MTX_CONTESTED;
+ m->mtx_lock = MTX_CONTESTED;
if (LOCK_LOG_TEST(&m->mtx_object, opts))
CTR1(KTR_LOCK, "_mtx_unlock_sleep: %p still contested",
m);
@@ -861,7 +861,7 @@
if (opts & MTX_DUPOK)
lock->lo_flags |= LO_DUPOK;
- m->mtx_lock = (void *)MTX_UNOWNED;
+ m->mtx_lock = MTX_UNOWNED;
LOCK_LOG_INIT(lock, opts);
@@ -883,7 +883,7 @@
if (!mtx_owned(m))
MPASS(mtx_unowned(m));
else {
- MPASS(((uintptr_t)m->mtx_lock & (MTX_FLAGMASK)) == 0);
+ MPASS((m->mtx_lock & (MTX_RECURSED|MTX_CONTESTED)) == 0);
/* Tell witness this isn't locked to make it happy. */
WITNESS_UNLOCK(&m->mtx_object, LOP_EXCLUSIVE, __FILE__,
==== //depot/projects/smpng/sys/kern/sched_4bsd.c#47 (text+ko) ====
@@ -961,7 +961,7 @@
if (td != newtd)
cpu_switch(td, newtd);
- sched_lock.mtx_lock = td;
+ sched_lock.mtx_lock = (uintptr_t)td;
td->td_oncpu = PCPU_GET(cpuid);
}
==== //depot/projects/smpng/sys/kern/sched_ule.c#54 (text+ko) ====
@@ -1393,7 +1393,7 @@
newtd = choosethread();
if (td != newtd)
cpu_switch(td, newtd);
- sched_lock.mtx_lock = td;
+ sched_lock.mtx_lock = (uintptr_t)td;
td->td_oncpu = PCPU_GET(cpuid);
}
==== //depot/projects/smpng/sys/kern/subr_witness.c#129 (text+ko) ====
@@ -407,7 +407,7 @@
LO_INITIALIZED, /* mtx_object.lo_flags */
{ NULL, NULL }, /* mtx_object.lo_list */
NULL }, /* mtx_object.lo_witness */
- (void *)MTX_UNOWNED, 0 /* mtx_lock, mtx_recurse */
+ MTX_UNOWNED, 0 /* mtx_lock, mtx_recurse */
};
/*
==== //depot/projects/smpng/sys/powerpc/include/atomic.h#9 (text+ko) ====
@@ -406,7 +406,7 @@
#endif /* 0 */
static __inline int
-atomic_cmpset_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_32((volatile uint32_t *)dst, (uint32_t)exp,
@@ -437,7 +437,7 @@
#define atomic_cmpset_rel_long atomic_cmpset_rel_32
static __inline int
-atomic_cmpset_acq_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_acq_32((volatile uint32_t *)dst,
@@ -445,7 +445,7 @@
}
static __inline int
-atomic_cmpset_rel_ptr(volatile void **dst, void *exp, void *src)
+atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src)
{
return (atomic_cmpset_rel_32((volatile uint32_t *)dst,
@@ -453,14 +453,14 @@
}
static __inline void *
-atomic_load_acq_ptr(volatile void **p)
+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_ptr(volatile void *p, void *v)
{
atomic_store_rel_32((volatile uint32_t *)p, (uint32_t)v);
@@ -468,19 +468,19 @@
#define ATOMIC_PTR(NAME) \
static __inline void \
-atomic_##NAME##_ptr(volatile void **p, uintptr_t v) \
+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_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_ptr(volatile void *p, uintptr_t v) \
{ \
atomic_##NAME##_rel_32((volatile uint32_t *)p, v); \
}
==== //depot/projects/smpng/sys/sparc64/include/atomic.h#9 (text+ko) ====
@@ -278,7 +278,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, void *, void *, uintptr_t, 64);
#undef ATOMIC_GEN
#undef atomic_cas
==== //depot/projects/smpng/sys/sys/_mutex.h#14 (text+ko) ====
@@ -36,7 +36,7 @@
*/
struct mtx {
struct lock_object mtx_object; /* Common lock properties. */
- volatile void * mtx_lock; /* Owner and flags. */
+ volatile uintptr_t mtx_lock; /* Owner and flags. */
u_int mtx_recurse; /* Number of recursive holds. */
#ifdef MUTEX_PROFILING
==== //depot/projects/smpng/sys/sys/mutex.h#50 (text+ko) ====
@@ -169,7 +169,7 @@
\
critical_enter(); \
if (!_obtain_lock((mp), _tid)) { \
- if ((mp)->mtx_lock == _tid) \
+ if ((mp)->mtx_lock == (uintptr_t)_tid) \
(mp)->mtx_recurse++; \
else \
_mtx_lock_spin((mp), _tid, (opts), (file), (line)); \
@@ -180,12 +180,11 @@
struct thread *_tid = (tid); \
\
critical_enter(); \
- if ((mp)->mtx_lock == _tid) \
+ if ((mp)->mtx_lock == (uintptr_t)_tid) \
(mp)->mtx_recurse++; \
else { \
- KASSERT((mp)->mtx_lock == (void *)MTX_UNOWNED, \
- ("corrupt spinlock")); \
- (mp)->mtx_lock = _tid; \
+ KASSERT((mp)->mtx_lock == MTX_UNOWNED, ("corrupt spinlock")); \
+ (mp)->mtx_lock = (uintptr_t)_tid; \
} \
} while (0)
#endif /* SMP */
@@ -226,7 +225,7 @@
if (mtx_recursed((mp))) \
(mp)->mtx_recurse--; \
else \
- (mp)->mtx_lock = (void *)MTX_UNOWNED; \
+ (mp)->mtx_lock = MTX_UNOWNED; \
critical_exit(); \
} while (0)
#endif /* SMP */
@@ -321,7 +320,7 @@
#define mtx_initialized(m) ((m)->mtx_object.lo_flags & LO_INITIALIZED)
-#define mtx_owned(m) (((uintptr_t)(m)->mtx_lock & MTX_FLAGMASK) == (uintptr_t)curthread)
+#define mtx_owned(m) (((m)->mtx_lock & MTX_FLAGMASK) == (uintptr_t)curthread)
#define mtx_recursed(m) ((m)->mtx_recurse != 0)
More information about the p4-projects
mailing list