aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/pci_msi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/kernel/pci_msi.c')
-rw-r--r--arch/sparc/kernel/pci_msi.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/arch/sparc/kernel/pci_msi.c b/arch/sparc/kernel/pci_msi.c
index 550e937720e7..30982e9ab626 100644
--- a/arch/sparc/kernel/pci_msi.c
+++ b/arch/sparc/kernel/pci_msi.c
@@ -30,13 +30,10 @@ static irqreturn_t sparc64_msiq_interrupt(int irq, void *cookie)
30 30
31 err = ops->dequeue_msi(pbm, msiqid, &head, &msi); 31 err = ops->dequeue_msi(pbm, msiqid, &head, &msi);
32 if (likely(err > 0)) { 32 if (likely(err > 0)) {
33 struct irq_desc *desc;
34 unsigned int irq; 33 unsigned int irq;
35 34
36 irq = pbm->msi_irq_table[msi - pbm->msi_first]; 35 irq = pbm->msi_irq_table[msi - pbm->msi_first];
37 desc = irq_desc + irq; 36 generic_handle_irq(irq);
38
39 desc->handle_irq(irq, desc);
40 } 37 }
41 38
42 if (unlikely(err < 0)) 39 if (unlikely(err < 0))
@@ -136,8 +133,8 @@ static int sparc64_setup_msi_irq(unsigned int *irq_p,
136 if (!*irq_p) 133 if (!*irq_p)
137 goto out_err; 134 goto out_err;
138 135
139 set_irq_chip_and_handler_name(*irq_p, &msi_irq, 136 irq_set_chip_and_handler_name(*irq_p, &msi_irq, handle_simple_irq,
140 handle_simple_irq, "MSI"); 137 "MSI");
141 138
142 err = alloc_msi(pbm); 139 err = alloc_msi(pbm);
143 if (unlikely(err < 0)) 140 if (unlikely(err < 0))
@@ -163,7 +160,7 @@ static int sparc64_setup_msi_irq(unsigned int *irq_p,
163 } 160 }
164 msg.data = msi; 161 msg.data = msi;
165 162
166 set_irq_msi(*irq_p, entry); 163 irq_set_msi_desc(*irq_p, entry);
167 write_msi_msg(*irq_p, &msg); 164 write_msi_msg(*irq_p, &msg);
168 165
169 return 0; 166 return 0;
@@ -172,7 +169,7 @@ out_msi_free:
172 free_msi(pbm, msi); 169 free_msi(pbm, msi);
173 170
174out_irq_free: 171out_irq_free:
175 set_irq_chip(*irq_p, NULL); 172 irq_set_chip(*irq_p, NULL);
176 irq_free(*irq_p); 173 irq_free(*irq_p);
177 *irq_p = 0; 174 *irq_p = 0;
178 175
@@ -211,7 +208,7 @@ static void sparc64_teardown_msi_irq(unsigned int irq,
211 208
212 free_msi(pbm, msi_num); 209 free_msi(pbm, msi_num);
213 210
214 set_irq_chip(irq, NULL); 211 irq_set_chip(irq, NULL);
215 irq_free(irq); 212 irq_free(irq);
216} 213}
217 214