Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
+++ kernel/generic/src/ddi/ddi.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -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,24 +140,26 @@
 		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,
 		    (btree_key_t) pf, &nodep);
 		
-		if ((!parea) || (parea->frames < pages))
+		if ((!parea) || (parea->frames < pages)) {
+			mutex_unlock(&parea_lock);
 			goto err;
+		}
 		
-		spinlock_unlock(&parea_lock);
+		mutex_unlock(&parea_lock);
 		goto map;
 	}
 	
+	spinlock_unlock(&zones.lock);
 err:
-	spinlock_unlock(&zones.lock);
 	interrupts_restore(ipl);
 	return ENOENT;
 	
 map:
-	spinlock_lock(&TASK->lock);
-	
+	interrupts_restore(ipl);
+
 	if (!as_area_create(TASK->as, flags, pages * PAGE_SIZE, vp,
 	    AS_AREA_ATTR_NONE, &phys_backend, &backend_data)) {
@@ -167,6 +168,4 @@
 		 * We report it using ENOMEM.
 		 */
-		spinlock_unlock(&TASK->lock);
-		interrupts_restore(ipl);
 		return ENOMEM;
 	}
@@ -175,7 +174,4 @@
 	 * Mapping is created on-demand during page fault.
 	 */
-	
-	spinlock_unlock(&TASK->lock);
-	interrupts_restore(ipl);
 	return 0;
 }
Index: kernel/generic/src/ddi/device.c
===================================================================
--- kernel/generic/src/ddi/device.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
+++ kernel/generic/src/ddi/device.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -35,5 +35,5 @@
  */
 
-#include <arch/types.h>
+#include <typedefs.h>
 #include <ddi/device.h>
 #include <atomic.h>
Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision 953bc1efafe8161834d87acae8f871ef640154a5)
+++ kernel/generic/src/ddi/irq.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -71,5 +71,5 @@
 #include <adt/hash_table.h>
 #include <mm/slab.h>
-#include <arch/types.h>
+#include <typedefs.h>
 #include <synch/spinlock.h>
 #include <console/console.h>
