Index: arch/ia32/src/drivers/i8042.c
===================================================================
--- arch/ia32/src/drivers/i8042.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ arch/ia32/src/drivers/i8042.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -241,5 +241,5 @@
 	trap_register(VECTOR_KBD, i8042_interrupt);
 	trap_virtual_enable_irqs(1<<IRQ_KBD);
-	spinlock_initialize(&keylock);
+	spinlock_initialize(&keylock, "i8042_lock");
 	chardev_initialize(&kbrd, &ops);
 	stdin = &kbrd;
Index: generic/include/synch/spinlock.h
===================================================================
--- generic/include/synch/spinlock.h	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/include/synch/spinlock.h	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -36,8 +36,11 @@
 #ifdef CONFIG_SMP
 struct spinlock {
+#ifdef CONFIG_DEBUG_SPINLOCK
+	char *name;
+#endif
 	int val;
 };
 
-extern void spinlock_initialize(spinlock_t *sl);
+extern void spinlock_initialize(spinlock_t *sl, char *name);
 extern void spinlock_lock(spinlock_t *sl);
 extern int spinlock_trylock(spinlock_t *sl);
Index: generic/src/console/chardev.c
===================================================================
--- generic/src/console/chardev.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/console/chardev.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -40,5 +40,5 @@
 {
 	waitq_initialize(&chardev->wq);
-	spinlock_initialize(&chardev->lock);
+	spinlock_initialize(&chardev->lock, "chardev");
 	chardev->counter = 0;
 	chardev->index = 0;
Index: generic/src/console/kconsole.c
===================================================================
--- generic/src/console/kconsole.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/console/kconsole.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -93,5 +93,5 @@
 void kconsole_init(void)
 {
-	spinlock_initialize(&cmd_lock);
+	spinlock_initialize(&cmd_lock, "kconsole_cmd");
 	list_initialize(&cmd_head);
 	
@@ -103,5 +103,5 @@
 	help_info.argv = NULL;
 
-	spinlock_initialize(&help_info.lock);
+	spinlock_initialize(&help_info.lock, "kconsole_help");
 	link_initialize(&help_info.link);
 
@@ -117,5 +117,5 @@
 	desc_info.argv = &desc_argv;
 	
-	spinlock_initialize(&desc_info.lock);
+	spinlock_initialize(&desc_info.lock, "kconsole_desc");
 	link_initialize(&desc_info.link);
 	
@@ -131,5 +131,5 @@
 	halt_info.argv = NULL;
 
-	spinlock_initialize(&halt_info.lock);
+	spinlock_initialize(&halt_info.lock, "kconsole_halt");
 	link_initialize(&halt_info.link);
 
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/mm/frame.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -242,5 +242,5 @@
 void zone_init(void)
 {
-	spinlock_initialize(&zone_head_lock);
+	spinlock_initialize(&zone_head_lock, "zone_head_lock");
 	list_initialize(&zone_head);
 }
@@ -317,5 +317,5 @@
 	if (z) {
 		link_initialize(&z->link);
-		spinlock_initialize(&z->lock);
+		spinlock_initialize(&z->lock, "zone_lock");
 	
 		z->base = start;
Index: generic/src/mm/heap.c
===================================================================
--- generic/src/mm/heap.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/mm/heap.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -47,5 +47,5 @@
 void early_heap_init(__address heap, size_t size)
 {
-	spinlock_initialize(&heaplock);
+	spinlock_initialize(&heaplock, "heap_lock");
 	memsetb(heap, size, 0);
 	chunk0 = (chunk_t *) heap;
Index: generic/src/mm/tlb.c
===================================================================
--- generic/src/mm/tlb.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/mm/tlb.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -44,5 +44,5 @@
 {
 	if (config.cpu_active == 1)
-		spinlock_initialize(&tlblock);
+		spinlock_initialize(&tlblock, "tlb_lock");
 
 	tlb_init_arch();
Index: generic/src/mm/vm.c
===================================================================
--- generic/src/mm/vm.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/mm/vm.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -56,5 +56,5 @@
 	m = (vm_t *) malloc(sizeof(vm_t));
 	if (m) {
-		spinlock_initialize(&m->lock);
+		spinlock_initialize(&m->lock, "vm_lock");
 		list_initialize(&m->vm_area_head);
 
@@ -118,5 +118,5 @@
 			a->mapping[i] = frame_alloc(0, ONE_FRAME);
 		
-		spinlock_initialize(&a->lock);
+		spinlock_initialize(&a->lock, "vm_area_lock");
 			
 		link_initialize(&a->link);			
Index: generic/src/proc/task.c
===================================================================
--- generic/src/proc/task.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/proc/task.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -49,5 +49,5 @@
 {
 	TASK = NULL;
-	spinlock_initialize(&tasks_lock);
+	spinlock_initialize(&tasks_lock, "tasks_lock");
 	list_initialize(&tasks_head);
 }
@@ -70,5 +70,5 @@
 	ta = (task_t *) malloc(sizeof(task_t));
 	if (ta) {
-		spinlock_initialize(&ta->lock);
+		spinlock_initialize(&ta->lock, "task_ta_lock");
 		list_initialize(&ta->th_head);
 		list_initialize(&ta->tasks_link);
Index: generic/src/proc/thread.c
===================================================================
--- generic/src/proc/thread.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/proc/thread.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -97,5 +97,5 @@
 	THREAD = NULL;
 	nrdy = 0;
-	spinlock_initialize(&threads_lock);
+	spinlock_initialize(&threads_lock, "threads_lock");
 	list_initialize(&threads_head);
 }
@@ -174,5 +174,5 @@
 		ipl_t ipl;
 	
-		spinlock_initialize(&t->lock);
+		spinlock_initialize(&t->lock, "thread_t_lock");
 	
 		frame_ks = frame_alloc(FRAME_KA, ONE_FRAME);
Index: generic/src/synch/rwlock.c
===================================================================
--- generic/src/synch/rwlock.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/synch/rwlock.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -76,5 +76,5 @@
  */
 void rwlock_initialize(rwlock_t *rwl) {
-	spinlock_initialize(&rwl->lock);
+	spinlock_initialize(&rwl->lock, "rwlock");
 	mutex_initialize(&rwl->exclusive);
 	rwl->readers_in = 0;
Index: generic/src/synch/spinlock.c
===================================================================
--- generic/src/synch/spinlock.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/synch/spinlock.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -34,4 +34,5 @@
 #include <print.h>
 #include <debug.h>
+#include <symtab.h>
 
 #ifdef CONFIG_SMP
@@ -43,7 +44,10 @@
  * @param sl Pointer to spinlock_t structure.
  */
-void spinlock_initialize(spinlock_t *sl)
+void spinlock_initialize(spinlock_t *sl, char *name)
 {
 	sl->val = 0;
+#ifdef CONFIG_DEBUG_SPINLOCK
+	sl->name = name;
+#endif	
 }
 
@@ -60,10 +64,16 @@
 {
 	int i = 0;
-	__address caller = ((__u32 *) &sl)[-1];
+	__address caller = ((__address *) &sl)[-1];
+	char *symbol;
 
 	preemption_disable();
 	while (test_and_set(&sl->val)) {
 		if (i++ > 300000) {
-			printf("cpu%d: looping on spinlock %X, caller=%X\n", CPU->id, sl, caller);
+			printf("cpu%d: looping on spinlock %p:%s, caller=%p",
+			       CPU->id, sl, sl->name, caller);
+			symbol = get_symtab_entry(caller);
+			if (symbol)
+				printf("(%s)", symbol);
+			printf("\n");
 			i = 0;
 		}
Index: generic/src/synch/waitq.c
===================================================================
--- generic/src/synch/waitq.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/synch/waitq.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -47,5 +47,5 @@
 void waitq_initialize(waitq_t *wq)
 {
-	spinlock_initialize(&wq->lock);
+	spinlock_initialize(&wq->lock, "waitq_lock");
 	list_initialize(&wq->head);
 	wq->missed_wakeups = 0;
Index: generic/src/time/timeout.c
===================================================================
--- generic/src/time/timeout.c	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ generic/src/time/timeout.c	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -48,5 +48,5 @@
 void timeout_init(void)
 {
-	spinlock_initialize(&CPU->timeoutlock);
+	spinlock_initialize(&CPU->timeoutlock, "timeout_lock");
 	list_initialize(&CPU->timeout_active_head);
 }
@@ -79,5 +79,5 @@
 void timeout_initialize(timeout_t *t)
 {
-	spinlock_initialize(&t->lock);
+	spinlock_initialize(&t->lock, "timeout_t_lock");
 	timeout_reinitialize(t);
 }
Index: tools/config.py
===================================================================
--- tools/config.py	(revision 36e7b6c324186726ec258e6d341ad12966be7c96)
+++ tools/config.py	(revision 2d93f1f9242c39f6e8a125f6fc3f2297727f4f04)
@@ -40,5 +40,5 @@
     def print_title(self):
         if not self.printed:
-            sys.stdout.write("*** %s ***\n" % self.title)
+            sys.stdout.write("\n*** %s ***\n" % self.title)
             self.printed = True
 
@@ -313,5 +313,5 @@
             # Last comment before question will be displayed to the user
             comment = line[1:].strip()
-        elif line.startswith('##'):
+        elif line.startswith('## '):
             # Set title of the dialog window
             dlg.set_title(line[2:].strip())
