Index: kernel/generic/src/synch/mutex.c
===================================================================
--- kernel/generic/src/synch/mutex.c	(revision 905721b9dfaa60ff0d48e25697a1979786d8b6c1)
+++ kernel/generic/src/synch/mutex.c	(revision 311929ece96bf4dc6018e75e0d12e512b9e541e4)
@@ -40,4 +40,5 @@
 #include <debug.h>
 #include <arch.h>
+#include <stacktrace.h>
 
 /** Initialize mutex.
@@ -87,8 +88,19 @@
 		ASSERT(!(flags & SYNCH_FLAGS_INTERRUPTIBLE));
 		
+		unsigned int cnt = 0;
+		bool deadlock_reported = false;
 		do {
+			if (cnt++ > DEADLOCK_THRESHOLD) {
+				printf("cpu%u: looping on active mutex %p\n",
+				    CPU->id, mtx);
+				stack_trace();
+				cnt = 0;
+				deadlock_reported = true;
+			}
 			rc = semaphore_trydown(&mtx->sem);
 		} while (SYNCH_FAILED(rc) &&
 		    !(flags & SYNCH_FLAGS_NON_BLOCKING));
+		if (deadlock_reported)
+			printf("cpu%u: not deadlocked\n", CPU->id);
 	}
 
Index: kernel/generic/src/synch/spinlock.c
===================================================================
--- kernel/generic/src/synch/spinlock.c	(revision 905721b9dfaa60ff0d48e25697a1979786d8b6c1)
+++ kernel/generic/src/synch/spinlock.c	(revision 311929ece96bf4dc6018e75e0d12e512b9e541e4)
@@ -44,4 +44,5 @@
 #include <debug.h>
 #include <symtab.h>
+#include <stacktrace.h>
 
 #ifdef CONFIG_SMP
@@ -104,4 +105,5 @@
 			    "caller=%p (%s)\n", CPU->id, lock, lock->name,
 			    (void *) CALLER, symtab_fmt_name_lookup(CALLER));
+			stack_trace();
 			
 			i = 0;
