powerpc: Rework Axon MSI setup so we can avoid freeing the irq_host
authorMichael Ellerman <michael@ellerman.id.au>
Mon, 26 May 2008 02:12:30 +0000 (12:12 +1000)
committerPaul Mackerras <paulus@samba.org>
Mon, 9 Jun 2008 03:51:13 +0000 (13:51 +1000)
If we do the call to irq_of_parse_and_map() first, then we don't
need to worry about freeing the irq_host.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/axon_msi.c

index 8b055bc..b43defb 100644 (file)
@@ -358,6 +358,13 @@ static int axon_msi_probe(struct of_device *device,
                goto out_free_msic;
        }
 
+       virq = irq_of_parse_and_map(dn, 0);
+       if (virq == NO_IRQ) {
+               printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
+                      dn->full_name);
+               goto out_free_fifo;
+       }
+
        msic->irq_host = irq_alloc_host(of_node_get(dn), IRQ_HOST_MAP_NOMAP,
                                        NR_IRQS, &msic_host_ops, 0);
        if (!msic->irq_host) {
@@ -368,13 +375,6 @@ static int axon_msi_probe(struct of_device *device,
 
        msic->irq_host->host_data = msic;
 
-       virq = irq_of_parse_and_map(dn, 0);
-       if (virq == NO_IRQ) {
-               printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
-                      dn->full_name);
-               goto out_free_host;
-       }
-
        set_irq_data(virq, msic);
        set_irq_chained_handler(virq, axon_msi_cascade);
        pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq);
@@ -399,8 +399,6 @@ static int axon_msi_probe(struct of_device *device,
 
        return 0;
 
-out_free_host:
-       kfree(msic->irq_host);
 out_free_fifo:
        dma_free_coherent(&device->dev, MSIC_FIFO_SIZE_BYTES, msic->fifo_virt,
                          msic->fifo_phys);