powerpc/axon_msi: Validate msi irq via chip_data
authorMilton Miller <miltonm@bga.com>
Tue, 10 May 2011 19:30:33 +0000 (19:30 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 19 May 2011 05:31:57 +0000 (15:31 +1000)
Instead of checking for rogue msi numbers via the irq_map host field
set the chip_data to h.host_data (which is the msic struct pointer)
at map and compare it in get_irq.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/cell/axon_msi.c

index 1e3329e8578b07c932a5c693189591963278b55c..ac06903e136a2df7f9b871013878c7fcb7aed761 100644 (file)
@@ -113,7 +113,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc)
                pr_devel("axon_msi: woff %x roff %x msi %x\n",
                          write_offset, msic->read_offset, msi);
 
-               if (msi < NR_IRQS && virq_to_host(msi) == msic->irq_host) {
+               if (msi < NR_IRQS && irq_get_chip_data(msi) == msic) {
                        generic_handle_irq(msi);
                        msic->fifo_virt[idx] = cpu_to_le32(0xffffffff);
                } else {
@@ -320,6 +320,7 @@ static struct irq_chip msic_irq_chip = {
 static int msic_host_map(struct irq_host *h, unsigned int virq,
                         irq_hw_number_t hw)
 {
+       irq_set_chip_data(virq, h->host_data);
        irq_set_chip_and_handler(virq, &msic_irq_chip, handle_simple_irq);
 
        return 0;