summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/pci_msi.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2007-10-22 11:16:45 +0200
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-22 11:16:45 +0200
commit8d57d3ad0c4641bc6b720160215c907a3d1004a0 (patch)
treea2ea60d7d49344c74c41dde69ad07be5752dba55 /arch/sparc64/kernel/pci_msi.c
parent[SPARC64]: Update defconfig. (diff)
downloadlinux-8d57d3ad0c4641bc6b720160215c907a3d1004a0.tar.xz
linux-8d57d3ad0c4641bc6b720160215c907a3d1004a0.zip
[SPARC64]: Stop using __do_IRQ().
Invoke the desc->handle_irq directly in the top-level dispatch, just like other sophisticated ports. This will allow us to decrease the cost of the MSI queue dispatch. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/pci_msi.c')
-rw-r--r--arch/sparc64/kernel/pci_msi.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/sparc64/kernel/pci_msi.c b/arch/sparc64/kernel/pci_msi.c
index 31a165fd3e48..d6d64b44af63 100644
--- a/arch/sparc64/kernel/pci_msi.c
+++ b/arch/sparc64/kernel/pci_msi.c
@@ -28,8 +28,15 @@ static irqreturn_t sparc64_msiq_interrupt(int irq, void *cookie)
unsigned long msi;
err = ops->dequeue_msi(pbm, msiqid, &head, &msi);
- if (likely(err > 0))
- __do_IRQ(pbm->msi_irq_table[msi - pbm->msi_first]);
+ if (likely(err > 0)) {
+ struct irq_desc *desc;
+ unsigned int virt_irq;
+
+ virt_irq = pbm->msi_irq_table[msi - pbm->msi_first];
+ desc = irq_desc + virt_irq;
+
+ desc->handle_irq(virt_irq, desc);
+ }
if (unlikely(err < 0))
goto err_dequeue;
@@ -128,7 +135,8 @@ int sparc64_setup_msi_irq(unsigned int *virt_irq_p,
if (!*virt_irq_p)
goto out_err;
- set_irq_chip(*virt_irq_p, &msi_irq);
+ set_irq_chip_and_handler_name(*virt_irq_p, &msi_irq,
+ handle_simple_irq, "MSI");
err = alloc_msi(pbm);
if (unlikely(err < 0))