Index: kernel/generic/src/sysinfo/sysinfo.c
===================================================================
--- kernel/generic/src/sysinfo/sysinfo.c	(revision a3900ccd7e17ab082827110cf5c4b6ee6faefd2b)
+++ kernel/generic/src/sysinfo/sysinfo.c	(revision 6b6626d326965590a27f05bbec5599ed571e5d9e)
@@ -37,5 +37,5 @@
 #include <print.h>
 #include <syscall/copy.h>
-#include <synch/spinlock.h>
+#include <synch/mutex.h>
 #include <arch/asm.h>
 #include <errno.h>
@@ -52,6 +52,6 @@
 static slab_cache_t *sysinfo_item_slab;
 
-/** Sysinfo spinlock */
-SPINLOCK_STATIC_INITIALIZE_NAME(sysinfo_lock, "sysinfo_lock");
+/** Sysinfo lock */
+static mutex_t sysinfo_lock;
 
 /** Sysinfo item constructor
@@ -98,4 +98,6 @@
 	    sizeof(sysinfo_item_t), 0, sysinfo_item_constructor,
 	    sysinfo_item_destructor, SLAB_CACHE_MAGDEFERRED);
+
+	mutex_initialize(&sysinfo_lock, MUTEX_ACTIVE);
 }
 
@@ -300,5 +302,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -311,5 +313,5 @@
 	}
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -333,5 +335,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -345,5 +347,5 @@
 	}
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -362,5 +364,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -373,5 +375,5 @@
 	}
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -395,5 +397,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -406,5 +408,5 @@
 	}
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -421,5 +423,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -430,5 +432,5 @@
 		item->val_type = SYSINFO_VAL_UNDEFINED;
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -447,5 +449,5 @@
 	/* Protect sysinfo tree consistency */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -461,5 +463,5 @@
 	}
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -480,8 +482,5 @@
  *
  * Should be called with interrupts disabled
- * and sysinfo_lock held. Because this routine
- * might take a reasonable long time to proceed,
- * having the spinlock held is not optimal, but
- * there is no better simple solution.
+ * and sysinfo_lock held.
  *
  * @param root  Root item of the current (sub)tree.
@@ -560,5 +559,5 @@
 	   while we are dumping it */
 	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&sysinfo_lock);
+	mutex_lock(&sysinfo_lock);
 	
 	if (root == NULL)
@@ -567,5 +566,5 @@
 		sysinfo_dump_internal(root, 0);
 	
-	spinlock_unlock(&sysinfo_lock);
+	mutex_unlock(&sysinfo_lock);
 	interrupts_restore(ipl);
 }
@@ -660,7 +659,7 @@
 		 */
 		ipl_t ipl = interrupts_disable();
-		spinlock_lock(&sysinfo_lock);
+		mutex_lock(&sysinfo_lock);
 		ret = sysinfo_get_item(path, NULL, dry_run);
-		spinlock_unlock(&sysinfo_lock);
+		mutex_unlock(&sysinfo_lock);
 		interrupts_restore(ipl);
 	}
