aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/chip.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2006-06-29 05:25:03 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-29 13:26:26 -0400
commit47c2a3aa4475d27073dd3c7e183fcc13f495c8f5 (patch)
treed151e03da804103753977c2c94e17b71104e3d35 /kernel/irq/chip.c
parentf702d7013c7470284843a6370aaa53b8b75c5a40 (diff)
[PATCH] genirq: add chip->eoi(), fastack -> fasteoi
Clean up the fastack concept by turning it into fasteoi and introducing the ->eoi() method for chips. This also allows the cleanup of an i386 EOI quirk - now the quirk is cleanly separated from the pure ACK implementation. Signed-off-by: Ingo Molnar <mingo@elte.hu> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Roland Dreier <rolandd@cisco.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r--kernel/irq/chip.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index a99047a324eb..4a0952d9458b 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -280,18 +280,18 @@ out:
280} 280}
281 281
282/** 282/**
283 * handle_fastack_irq - irq handler for transparent controllers 283 * handle_fasteoi_irq - irq handler for transparent controllers
284 * @irq: the interrupt number 284 * @irq: the interrupt number
285 * @desc: the interrupt description structure for this irq 285 * @desc: the interrupt description structure for this irq
286 * @regs: pointer to a register structure 286 * @regs: pointer to a register structure
287 * 287 *
288 * Only a single callback will be issued to the chip: an ->ack() 288 * Only a single callback will be issued to the chip: an ->eoi()
289 * call when the interrupt has been serviced. This enables support 289 * call when the interrupt has been serviced. This enables support
290 * for modern forms of interrupt handlers, which handle the flow 290 * for modern forms of interrupt handlers, which handle the flow
291 * details in hardware, transparently. 291 * details in hardware, transparently.
292 */ 292 */
293void fastcall 293void fastcall
294handle_fastack_irq(unsigned int irq, struct irq_desc *desc, 294handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc,
295 struct pt_regs *regs) 295 struct pt_regs *regs)
296{ 296{
297 unsigned int cpu = smp_processor_id(); 297 unsigned int cpu = smp_processor_id();
@@ -327,10 +327,7 @@ handle_fastack_irq(unsigned int irq, struct irq_desc *desc,
327 spin_lock(&desc->lock); 327 spin_lock(&desc->lock);
328 desc->status &= ~IRQ_INPROGRESS; 328 desc->status &= ~IRQ_INPROGRESS;
329out: 329out:
330 if (!(desc->status & IRQ_DISABLED)) 330 desc->chip->eoi(irq);
331 desc->chip->ack(irq);
332 else
333 desc->chip->mask(irq);
334 331
335 spin_unlock(&desc->lock); 332 spin_unlock(&desc->lock);
336} 333}
@@ -510,19 +507,19 @@ handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *,
510 struct pt_regs *)) 507 struct pt_regs *))
511{ 508{
512 if (handle == handle_level_irq) 509 if (handle == handle_level_irq)
513 return "level "; 510 return "level ";
514 if (handle == handle_fastack_irq) 511 if (handle == handle_fasteoi_irq)
515 return "level "; 512 return "fasteoi";
516 if (handle == handle_edge_irq) 513 if (handle == handle_edge_irq)
517 return "edge "; 514 return "edge ";
518 if (handle == handle_simple_irq) 515 if (handle == handle_simple_irq)
519 return "simple"; 516 return "simple ";
520#ifdef CONFIG_SMP 517#ifdef CONFIG_SMP
521 if (handle == handle_percpu_irq) 518 if (handle == handle_percpu_irq)
522 return "percpu"; 519 return "percpu ";
523#endif 520#endif
524 if (handle == handle_bad_irq) 521 if (handle == handle_bad_irq)
525 return "bad "; 522 return "bad ";
526 523
527 return NULL; 524 return NULL;
528} 525}