diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2007-10-22 05:16:45 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-22 05:16:45 -0400 |
commit | 8d57d3ad0c4641bc6b720160215c907a3d1004a0 (patch) | |
tree | a2ea60d7d49344c74c41dde69ad07be5752dba55 /arch/sparc64/kernel/pci_msi.c | |
parent | 3d0a721f04fe9321ca360fbab144ea10682d458a (diff) |
[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.c | 14 |
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) | |||
28 | unsigned long msi; | 28 | unsigned long msi; |
29 | 29 | ||
30 | err = ops->dequeue_msi(pbm, msiqid, &head, &msi); | 30 | err = ops->dequeue_msi(pbm, msiqid, &head, &msi); |
31 | if (likely(err > 0)) | 31 | if (likely(err > 0)) { |
32 | __do_IRQ(pbm->msi_irq_table[msi - pbm->msi_first]); | 32 | struct irq_desc *desc; |
33 | unsigned int virt_irq; | ||
34 | |||
35 | virt_irq = pbm->msi_irq_table[msi - pbm->msi_first]; | ||
36 | desc = irq_desc + virt_irq; | ||
37 | |||
38 | desc->handle_irq(virt_irq, desc); | ||
39 | } | ||
33 | 40 | ||
34 | if (unlikely(err < 0)) | 41 | if (unlikely(err < 0)) |
35 | goto err_dequeue; | 42 | goto err_dequeue; |
@@ -128,7 +135,8 @@ int sparc64_setup_msi_irq(unsigned int *virt_irq_p, | |||
128 | if (!*virt_irq_p) | 135 | if (!*virt_irq_p) |
129 | goto out_err; | 136 | goto out_err; |
130 | 137 | ||
131 | set_irq_chip(*virt_irq_p, &msi_irq); | 138 | set_irq_chip_and_handler_name(*virt_irq_p, &msi_irq, |
139 | handle_simple_irq, "MSI"); | ||
132 | 140 | ||
133 | err = alloc_msi(pbm); | 141 | err = alloc_msi(pbm); |
134 | if (unlikely(err < 0)) | 142 | if (unlikely(err < 0)) |