Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision 0b477813dc5a5ebce898b3650c9eab0de6cc05f3)
+++ kernel/generic/src/mm/frame.c	(revision c626117d454226d577af1687d21ab9f141251eea)
@@ -72,5 +72,5 @@
  * available.
  */
-static MUTEX_INITIALIZE(mem_avail_mtx, MUTEX_ACTIVE);
+static IRQ_SPINLOCK_INITIALIZE(mem_avail_lock);
 static CONDVAR_INITIALIZE(mem_avail_cv);
 static size_t mem_avail_req = 0;  /**< Number of frames requested. */
@@ -951,10 +951,6 @@
 #endif
 
-		/*
-		 * Since the mem_avail_mtx is an active mutex, we need to
-		 * disable interrupts to prevent deadlock with TLB shootdown.
-		 */
-		ipl_t ipl = interrupts_disable();
-		mutex_lock(&mem_avail_mtx);
+		/* Disabled interrupts needed to prevent deadlock with TLB shootdown. */
+		irq_spinlock_lock(&mem_avail_lock, true);
 
 		if (mem_avail_req > 0)
@@ -966,8 +962,7 @@
 
 		while (gen == mem_avail_gen)
-			condvar_wait(&mem_avail_cv, &mem_avail_mtx);
-
-		mutex_unlock(&mem_avail_mtx);
-		interrupts_restore(ipl);
+			condvar_wait(&mem_avail_cv, &mem_avail_lock);
+
+		irq_spinlock_unlock(&mem_avail_lock, true);
 
 #ifdef CONFIG_DEBUG
@@ -1027,13 +1022,8 @@
 	irq_spinlock_unlock(&zones.lock, true);
 
-	/*
-	 * Signal that some memory has been freed.
-	 * Since the mem_avail_mtx is an active mutex,
-	 * we need to disable interruptsto prevent deadlock
-	 * with TLB shootdown.
-	 */
-
-	ipl_t ipl = interrupts_disable();
-	mutex_lock(&mem_avail_mtx);
+	/* Signal that some memory has been freed. */
+
+	/* Disabled interrupts needed to prevent deadlock with TLB shootdown. */
+	irq_spinlock_lock(&mem_avail_lock, true);
 
 	if (mem_avail_req > 0)
@@ -1045,6 +1035,5 @@
 	}
 
-	mutex_unlock(&mem_avail_mtx);
-	interrupts_restore(ipl);
+	irq_spinlock_unlock(&mem_avail_lock, true);
 
 	if (!(flags & FRAME_NO_RESERVE))
Index: kernel/generic/src/sysinfo/sysinfo.c
===================================================================
--- kernel/generic/src/sysinfo/sysinfo.c	(revision 0b477813dc5a5ebce898b3650c9eab0de6cc05f3)
+++ kernel/generic/src/sysinfo/sysinfo.c	(revision c626117d454226d577af1687d21ab9f141251eea)
@@ -57,5 +57,5 @@
 
 /** Sysinfo lock */
-static MUTEX_INITIALIZE(sysinfo_lock, MUTEX_ACTIVE);
+static IRQ_SPINLOCK_INITIALIZE(sysinfo_lock);
 
 /** Sysinfo item constructor
@@ -327,5 +327,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -340,5 +340,5 @@
 	}
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -360,5 +360,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -374,5 +374,5 @@
 	}
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -390,5 +390,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -404,5 +404,5 @@
 	}
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -425,5 +425,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -439,5 +439,5 @@
 	}
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -452,5 +452,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -463,5 +463,5 @@
 		printf("Could not set sysinfo item %s.\n", name);
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -479,5 +479,5 @@
 {
 	/* Protect sysinfo tree consistency */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -498,5 +498,5 @@
 	}
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -596,5 +596,5 @@
 	 * while we are dumping it
 	 */
-	mutex_lock(&sysinfo_lock);
+	irq_spinlock_lock(&sysinfo_lock, true);
 
 	if (root == NULL)
@@ -603,5 +603,5 @@
 		sysinfo_dump_internal(root, 0);
 
-	mutex_unlock(&sysinfo_lock);
+	irq_spinlock_unlock(&sysinfo_lock, true);
 }
 
@@ -695,7 +695,7 @@
 		 * are reading it.
 		 */
-		mutex_lock(&sysinfo_lock);
+		irq_spinlock_lock(&sysinfo_lock, true);
 		ret = sysinfo_get_item(path, NULL, dry_run);
-		mutex_unlock(&sysinfo_lock);
+		irq_spinlock_unlock(&sysinfo_lock, true);
 	}
 
@@ -806,7 +806,7 @@
 		 * are reading it.
 		 */
-		mutex_lock(&sysinfo_lock);
+		irq_spinlock_lock(&sysinfo_lock, true);
 		ret = sysinfo_get_keys(path, NULL, dry_run);
-		mutex_unlock(&sysinfo_lock);
+		irq_spinlock_unlock(&sysinfo_lock, true);
 	}
 
