Index: kernel/generic/src/mm/reserve.c
===================================================================
--- kernel/generic/src/mm/reserve.c	(revision 8b6930d5d4a9a2fdd17c45b45770dd51a1d956a6)
+++ kernel/generic/src/mm/reserve.c	(revision e5a015bdd9e331dc9aa3f0fbad1ae6a2f9281c96)
@@ -36,19 +36,39 @@
  */
 
-#include <typedefs.h>
 #include <mm/reserve.h>
 #include <mm/frame.h>
+#include <synch/spinlock.h>
+#include <typedefs.h>
+#include <arch/types.h>
+
+IRQ_SPINLOCK_STATIC_INITIALIZE_NAME(reserve_lock, "reserve_lock");
+static ssize_t reserve = 0;
 
 bool reserve_try_alloc(size_t size)
 {
-	return true;
+	bool reserved = false;
+
+	irq_spinlock_lock(&reserve_lock, true);
+	if (reserve >= 0 && (size_t) reserve >= size) {
+		reserve -= size;
+		reserved = true;
+	}
+	irq_spinlock_unlock(&reserve_lock, true);
+
+	return reserved;
 }
 
 void reserve_force_alloc(size_t size)
 {
+	irq_spinlock_lock(&reserve_lock, true);
+	reserve -= size;
+	irq_spinlock_unlock(&reserve_lock, true);
 }
 
 void reserve_free(size_t size)
 {
+	irq_spinlock_lock(&reserve_lock, true);
+	reserve += size;
+	irq_spinlock_unlock(&reserve_lock, true);
 }
 
