Index: kernel/generic/include/mm/slab.h
===================================================================
--- kernel/generic/include/mm/slab.h	(revision c8d0f9e51c2c5a2a57ccd5bd36d0254ea8199cf4)
+++ kernel/generic/include/mm/slab.h	(revision ddb56be81362cd43ec1cffdafa2e3ae8b64b96c1)
@@ -113,5 +113,5 @@
 	list_t full_slabs;     /**< List of full slabs */
 	list_t partial_slabs;  /**< List of partial slabs */
-	SPINLOCK_DECLARE(slablock);
+	IRQ_SPINLOCK_DECLARE(slablock);
 	/* Magazines */
 	list_t magazines;  /**< List o full magazines */
Index: kernel/generic/src/mm/slab.c
===================================================================
--- kernel/generic/src/mm/slab.c	(revision c8d0f9e51c2c5a2a57ccd5bd36d0254ea8199cf4)
+++ kernel/generic/src/mm/slab.c	(revision ddb56be81362cd43ec1cffdafa2e3ae8b64b96c1)
@@ -254,6 +254,4 @@
     slab_t *slab)
 {
-	ASSERT(interrupts_disabled());
-
 	if (!slab)
 		slab = obj2slab(obj);
@@ -266,5 +264,5 @@
 		freed = cache->destructor(obj);
 	
-	spinlock_lock(&cache->slablock);
+	irq_spinlock_lock(&cache->slablock, true);
 	ASSERT(slab->available < cache->objects);
 	
@@ -277,5 +275,5 @@
 		/* Free associated memory */
 		list_remove(&slab->link);
-		spinlock_unlock(&cache->slablock);
+		irq_spinlock_unlock(&cache->slablock, true);
 		
 		return freed + slab_space_free(cache, slab);
@@ -286,5 +284,5 @@
 	}
 	
-	spinlock_unlock(&cache->slablock);
+	irq_spinlock_unlock(&cache->slablock, true);
 	return freed;
 }
@@ -297,7 +295,5 @@
 NO_TRACE static void *slab_obj_create(slab_cache_t *cache, unsigned int flags)
 {
-	ASSERT(interrupts_disabled());
-
-	spinlock_lock(&cache->slablock);
+	irq_spinlock_lock(&cache->slablock, true);
 	
 	slab_t *slab;
@@ -312,10 +308,10 @@
 		 *
 		 */
-		spinlock_unlock(&cache->slablock);
+		irq_spinlock_unlock(&cache->slablock, true);
 		slab = slab_space_alloc(cache, flags);
 		if (!slab)
 			return NULL;
 		
-		spinlock_lock(&cache->slablock);
+		irq_spinlock_lock(&cache->slablock, true);
 	} else {
 		slab = list_get_instance(list_first(&cache->partial_slabs),
@@ -333,5 +329,5 @@
 		list_prepend(&slab->link, &cache->partial_slabs);
 	
-	spinlock_unlock(&cache->slablock);
+	irq_spinlock_unlock(&cache->slablock, true);
 	
 	if ((cache->constructor) && (cache->constructor(obj, flags))) {
@@ -632,5 +628,5 @@
 	list_initialize(&cache->magazines);
 	
-	spinlock_initialize(&cache->slablock, "slab.cache.slablock");
+	irq_spinlock_initialize(&cache->slablock, "slab.cache.slablock");
 	spinlock_initialize(&cache->maglock, "slab.cache.maglock");
 	
