diff --git a/arch/sparc/kernel/bootmem.c b/arch/sparc/kernel/bootmem.c
index 58d289de1e8f5f631648e163727f6aca8b4b6f62..26241a7ef5255e7439be01ecfd58e4a09725360a 100644
--- a/arch/sparc/kernel/bootmem.c
+++ b/arch/sparc/kernel/bootmem.c
@@ -28,6 +28,7 @@
 
 #include <kernel/printk.h>
 #include <kernel/kernel.h>
+#include <asm/irqflags.h>
 
 #include <chunk.h>
 
@@ -101,7 +102,9 @@ void *bootmem_alloc(size_t size)
 	if (!size)
 		return NULL;
 
+	arch_local_irq_disable();
 	ptr = chunk_alloc(&phys_mem_pool, size);
+	arch_local_irq_enable();
 
 	if (!ptr) {
 		pr_emerg("BOOTMEM: allocator out of memory\n");
@@ -120,7 +123,9 @@ void *bootmem_alloc(size_t size)
 
 void bootmem_free(void *ptr)
 {
+	arch_local_irq_disable();
 	chunk_free(&phys_mem_pool, ptr);
+	arch_local_irq_enable();
 }