diff --git a/arch/sparc/kernel/irq_32.c b/arch/sparc/kernel/irq_32.c
index f92cd34..31658bd 100644
--- a/arch/sparc/kernel/irq_32.c
+++ b/arch/sparc/kernel/irq_32.c
@@ -123,6 +123,7 @@ static void irq_panic(irq_handler_t handler)
 
 struct irq_bucket {
 	struct irq_bucket *next;
+	unsigned int real_irq;
 	unsigned int irq;
 	unsigned int pil;
 };
@@ -138,7 +139,7 @@ unsigned int irq_alloc(unsigned int real_irq, unsigned int pil)
 	unsigned int i;
 
 	for (i = 1; i < NR_IRQS; i++) {
-		if (irq_table[i].irq == real_irq && irq_table[i].irq == pil)
+		if (irq_table[i].real_irq == real_irq && irq_table[i].pil == pil)
 			return i;
 	}
 
@@ -151,6 +152,7 @@ unsigned int irq_alloc(unsigned int real_irq, unsigned int pil)
 		printk(KERN_ERR "IRQ: Out of virtual IRQs.\n");
 		return 0;
 	}
+	irq_table[i].real_irq = real_irq;
 	irq_table[i].irq = i;
 	irq_table[i].pil = pil;
 
