Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision 879585a3fd47daccb6ab751ad240297f65de5bae)
+++ kernel/generic/include/mm/as.h	(revision 547fa39619a466fb8274163c93478186568cd096)
@@ -102,8 +102,8 @@
 		asid_t asid;
 		
+		/** Number of references (i.e tasks that reference this as). */
+		atomic_t refcount;
+
 		mutex_t lock;
-		
-		/** Number of references (i.e tasks that reference this as). */
-		count_t refcount;
 		
 		/** B+tree of address space areas. */
@@ -148,8 +148,8 @@
 	asid_t asid;
 
+	/** Number of references (i.e tasks that reference this as). */
+	atomic_t refcount;
+
 	mutex_t lock;
-
-	/** Number of references (i.e tasks that reference this as). */
-	count_t refcount;
 
 	/** B+tree of address space areas. */
Index: kernel/generic/include/synch/mutex.h
===================================================================
--- kernel/generic/include/synch/mutex.h	(revision 879585a3fd47daccb6ab751ad240297f65de5bae)
+++ kernel/generic/include/synch/mutex.h	(revision 547fa39619a466fb8274163c93478186568cd096)
@@ -45,11 +45,9 @@
 
 #define mutex_lock(mtx) \
-	_mutex_lock_timeout((mtx),SYNCH_NO_TIMEOUT,SYNCH_FLAGS_NONE)
+	_mutex_lock_timeout((mtx), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE)
 #define mutex_trylock(mtx) \
-	_mutex_lock_timeout((mtx),SYNCH_NO_TIMEOUT,SYNCH_FLAGS_NON_BLOCKING)
-#define mutex_lock_timeout(mtx,usec) \
-	_mutex_lock_timeout((mtx),(usec),SYNCH_FLAGS_NON_BLOCKING)
-#define mutex_lock_active(mtx) \
-	while (mutex_trylock((mtx)) != ESYNCH_OK_ATOMIC)
+	_mutex_lock_timeout((mtx), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NON_BLOCKING)
+#define mutex_lock_timeout(mtx, usec) \
+	_mutex_lock_timeout((mtx), (usec), SYNCH_FLAGS_NON_BLOCKING)
 
 extern void mutex_initialize(mutex_t *mtx);
Index: kernel/generic/include/synch/spinlock.h
===================================================================
--- kernel/generic/include/synch/spinlock.h	(revision 879585a3fd47daccb6ab751ad240297f65de5bae)
+++ kernel/generic/include/synch/spinlock.h	(revision 547fa39619a466fb8274163c93478186568cd096)
@@ -102,4 +102,22 @@
 }
 
+#ifdef CONFIG_DEBUG_SPINLOCK
+
+extern int printf(const char *, ...);
+
+#define DEADLOCK_THRESHOLD		100000000
+#define DEADLOCK_PROBE_INIT(pname)	count_t pname = 0
+#define DEADLOCK_PROBE(pname, value)					\
+	if ((pname)++ > (value)) {					\
+		(pname) = 0;						\
+		printf("Deadlock probe %s: exceeded threshold %d\n",	\
+		    "cpu%d: function=%s, line=%d\n",			\
+		    #pname, (value), CPU->id, __FUNCTION__, __LINE__);	\
+	}
+#else
+#define DEADLOCK_PROBE_INIT(pname)
+#define DEADLOCK_PROBE(pname, value)
+#endif
+
 #else
 
@@ -114,4 +132,7 @@
 #define spinlock_unlock(x)		preemption_enable()
 
+#define DEADLOCK_PROBE_INIT(pname)
+#define DEADLOCK_PROBE(pname, value)
+
 #endif
 
