Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision c6218327f3437c1c5a023b48de7d6a9003c93ede)
+++ kernel/generic/src/ddi/ddi.c	(revision 373acb498b8d03eb86878ff7b4dd94c4fecea96f)
@@ -46,5 +46,5 @@
 #include <mm/frame.h>
 #include <mm/as.h>
-#include <synch/spinlock.h>
+#include <synch/mutex.h>
 #include <syscall/copy.h>
 #include <adt/btree.h>
@@ -54,5 +54,5 @@
 
 /** This lock protects the parea_btree. */
-SPINLOCK_INITIALIZE(parea_lock);
+static mutex_t parea_lock;
 
 /** B+tree with enabled physical memory areas. */
@@ -63,4 +63,5 @@
 {
 	btree_create(&parea_btree);
+	mutex_initialize(&parea_lock, MUTEX_PASSIVE);
 }
 
@@ -72,6 +73,5 @@
 void ddi_parea_register(parea_t *parea)
 {
-	ipl_t ipl = interrupts_disable();
-	spinlock_lock(&parea_lock);
+	mutex_lock(&parea_lock);
 	
 	/*
@@ -80,6 +80,5 @@
 	btree_insert(&parea_btree, (btree_key_t) parea->pbase, parea, NULL);
 	
-	spinlock_unlock(&parea_lock);
-	interrupts_restore(ipl);
+	mutex_unlock(&parea_lock);
 }
 
@@ -141,5 +140,5 @@
 		spinlock_unlock(&zones.lock);
 		
-		spinlock_lock(&parea_lock);
+		mutex_lock(&parea_lock);
 		btree_node_t *nodep;
 		parea_t *parea = (parea_t *) btree_search(&parea_btree,
@@ -147,9 +146,9 @@
 		
 		if ((!parea) || (parea->frames < pages)) {
-			spinlock_unlock(&parea_lock);
+			mutex_unlock(&parea_lock);
 			goto err;
 		}
 		
-		spinlock_unlock(&parea_lock);
+		mutex_unlock(&parea_lock);
 		goto map;
 	}
