aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2008-05-25 22:12:30 -0400
committerPaul Mackerras <paulus@samba.org>2008-06-08 23:51:13 -0400
commit997526db9fa408058f23de19c0e12abd9207276b (patch)
treea4a49702904ed4824453ef049f780c1712b99e76 /arch/powerpc
parent7c4f10b9003dc8423df07574ba197bbbe3bc382b (diff)
powerpc: Rework Axon MSI setup so we can avoid freeing the irq_host
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>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/cell/axon_msi.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c
index 8b055bce27fe..b43defb9918c 100644
--- a/arch/powerpc/platforms/cell/axon_msi.c
+++ b/arch/powerpc/platforms/cell/axon_msi.c
@@ -358,6 +358,13 @@ static int axon_msi_probe(struct of_device *device,
358 goto out_free_msic; 358 goto out_free_msic;
359 } 359 }
360 360
361 virq = irq_of_parse_and_map(dn, 0);
362 if (virq == NO_IRQ) {
363 printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
364 dn->full_name);
365 goto out_free_fifo;
366 }
367
361 msic->irq_host = irq_alloc_host(of_node_get(dn), IRQ_HOST_MAP_NOMAP, 368 msic->irq_host = irq_alloc_host(of_node_get(dn), IRQ_HOST_MAP_NOMAP,
362 NR_IRQS, &msic_host_ops, 0); 369 NR_IRQS, &msic_host_ops, 0);
363 if (!msic->irq_host) { 370 if (!msic->irq_host) {
@@ -368,13 +375,6 @@ static int axon_msi_probe(struct of_device *device,
368 375
369 msic->irq_host->host_data = msic; 376 msic->irq_host->host_data = msic;
370 377
371 virq = irq_of_parse_and_map(dn, 0);
372 if (virq == NO_IRQ) {
373 printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
374 dn->full_name);
375 goto out_free_host;
376 }
377
378 set_irq_data(virq, msic); 378 set_irq_data(virq, msic);
379 set_irq_chained_handler(virq, axon_msi_cascade); 379 set_irq_chained_handler(virq, axon_msi_cascade);
380 pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq); 380 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,
399 399
400 return 0; 400 return 0;
401 401
402out_free_host:
403 kfree(msic->irq_host);
404out_free_fifo: 402out_free_fifo:
405 dma_free_coherent(&device->dev, MSIC_FIFO_SIZE_BYTES, msic->fifo_virt, 403 dma_free_coherent(&device->dev, MSIC_FIFO_SIZE_BYTES, msic->fifo_virt,
406 msic->fifo_phys); 404 msic->fifo_phys);