diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index 8a0356531fb66ece3d4b134aa638bc6884c5ac10..e66e33cb948b6cf2c2936d7cf6976aa1d8064fb1 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -660,11 +660,14 @@ void __global_cli(void)
 
 void __global_sti(void)
 {
-	int cpu = smp_processor_id();
+	int cpu;
 
+	preempt_disable();
+	cpu = smp_processor_id();
 	if (! local_irq_count(cpu))
 		release_irqlock(cpu);
 	__sti();
+	preempt_enable();
 }
 
 unsigned long __global_save_flags(void)