[SPARC64]: Kill ugly __irq_ino() macro.

We have a place to stick INO information in the
virt_to_real_irq_table[], which is currently only used for VIRQs.
And that is readily accessible from the one __irq_ino() call site.

Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index dc51bdf..f8f7045 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -122,8 +122,6 @@
 			       "i" (ASI_PHYS_USE_EC));
 }
 
-#define __irq_ino(irq) \
-        (((struct ino_bucket *)(irq)) - &ivector_table[0])
 #define __bucket(irq) ((struct ino_bucket *)(irq))
 #define __irq(bucket) ((unsigned long)(bucket))
 
@@ -136,7 +134,9 @@
 } virt_to_real_irq_table[NR_IRQS];
 static DEFINE_SPINLOCK(virt_irq_alloc_lock);
 
-unsigned char virt_irq_alloc(unsigned long real_irq)
+unsigned char virt_irq_alloc(unsigned long real_irq,
+			     unsigned int dev_handle,
+			     unsigned int dev_ino)
 {
 	unsigned long flags;
 	unsigned char ent;
@@ -154,6 +154,8 @@
 		ent = 0;
 	} else {
 		virt_to_real_irq_table[ent].irq = real_irq;
+		virt_to_real_irq_table[ent].dev_handle = dev_handle;
+		virt_to_real_irq_table[ent].dev_ino = dev_ino;
 	}
 
 	spin_unlock_irqrestore(&virt_irq_alloc_lock, flags);
@@ -554,11 +556,12 @@
 
 static void run_pre_handler(unsigned int virt_irq)
 {
-	struct ino_bucket *bucket = virt_irq_to_bucket(virt_irq);
 	struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+	unsigned int ino;
 
+	ino = virt_to_real_irq_table[virt_irq].dev_ino;
 	if (likely(data->pre_handler)) {
-		data->pre_handler(__irq_ino(__irq(bucket)),
+		data->pre_handler(ino,
 				  data->pre_handler_arg1,
 				  data->pre_handler_arg2);
 	}
@@ -633,7 +636,7 @@
 	bucket = &ivector_table[ino];
 	virt_irq = bucket_get_virt_irq(__pa(bucket));
 	if (!virt_irq) {
-		virt_irq = virt_irq_alloc(__irq(bucket));
+		virt_irq = virt_irq_alloc(__irq(bucket), 0, ino);
 		bucket_set_virt_irq(__pa(bucket), virt_irq);
 		set_irq_chip(virt_irq, &sun4u_irq);
 	}
@@ -668,7 +671,7 @@
 	bucket = &ivector_table[sysino];
 	virt_irq = bucket_get_virt_irq(__pa(bucket));
 	if (!virt_irq) {
-		virt_irq = virt_irq_alloc(__irq(bucket));
+		virt_irq = virt_irq_alloc(__irq(bucket), 0, sysino);
 		bucket_set_virt_irq(__pa(bucket), virt_irq);
 		set_irq_chip(virt_irq, chip);
 	}
@@ -716,7 +719,7 @@
 			     ((unsigned long) bucket +
 			      sizeof(struct ino_bucket)));
 
-	virt_irq = virt_irq_alloc(__irq(bucket));
+	virt_irq = virt_irq_alloc(__irq(bucket), devhandle, devino);
 	bucket_set_virt_irq(__pa(bucket), virt_irq);
 	set_irq_chip(virt_irq, &sun4v_virq);
 
@@ -741,9 +744,6 @@
 		prom_halt();
 	}
 
-	virt_to_real_irq_table[virt_irq].dev_handle = devhandle;
-	virt_to_real_irq_table[virt_irq].dev_ino = devino;
-
 	return virt_irq;
 }
 
diff --git a/arch/sparc64/kernel/pci_msi.c b/arch/sparc64/kernel/pci_msi.c
index 0fa33b1..e4920cf 100644
--- a/arch/sparc64/kernel/pci_msi.c
+++ b/arch/sparc64/kernel/pci_msi.c
@@ -123,7 +123,7 @@
 	int msi, err;
 	u32 msiqid;
 
-	*virt_irq_p = virt_irq_alloc(~0);
+	*virt_irq_p = virt_irq_alloc(~0, 0, 0);
 	err = -ENOMEM;
 	if (!*virt_irq_p)
 		goto out_err;