aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc
diff options
context:
space:
mode:
authorKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-10-13 21:00:55 -0400
committerKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-10-14 01:30:11 -0400
commitba20085c20f1c9e8af546dea6ad0efa421bdef32 (patch)
treea5f0574f6b1e60526eb7d1b1e1a50125f10d463c /arch/parisc
parentcaf96194c05cd97ce96546fbcb1f35ec06aaaac7 (diff)
parisc: lay groundwork for killing __do_IRQ
Use proper accessors and handlers for generic irq cleanups. We just call back into __do_IRQ through desc->handler now, and remove the explicit calls. Signed-off-by: Kyle McMartin <kyle@redhat.com>
Diffstat (limited to 'arch/parisc')
-rw-r--r--arch/parisc/include/asm/irq.h3
-rw-r--r--arch/parisc/kernel/irq.c26
2 files changed, 19 insertions, 10 deletions
diff --git a/arch/parisc/include/asm/irq.h b/arch/parisc/include/asm/irq.h
index dfa26b67f919..47041d448d32 100644
--- a/arch/parisc/include/asm/irq.h
+++ b/arch/parisc/include/asm/irq.h
@@ -32,6 +32,9 @@ static __inline__ int irq_canonicalize(int irq)
32} 32}
33 33
34struct irq_chip; 34struct irq_chip;
35struct irq_desc;
36
37extern void parisc_do_IRQ(unsigned int irq, struct irq_desc *desc);
35 38
36/* 39/*
37 * Some useful "we don't have to do anything here" handlers. Should 40 * Some useful "we don't have to do anything here" handlers. Should
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c
index efbcee5d2220..272c29a44f2a 100644
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@ -151,7 +151,7 @@ static struct irq_chip cpu_interrupt_type = {
151 .enable = cpu_enable_irq, 151 .enable = cpu_enable_irq,
152 .disable = cpu_disable_irq, 152 .disable = cpu_disable_irq,
153 .ack = cpu_ack_irq, 153 .ack = cpu_ack_irq,
154 .end = cpu_end_irq, 154 .eoi = cpu_end_irq,
155#ifdef CONFIG_SMP 155#ifdef CONFIG_SMP
156 .set_affinity = cpu_set_affinity_irq, 156 .set_affinity = cpu_set_affinity_irq,
157#endif 157#endif
@@ -247,10 +247,11 @@ int cpu_claim_irq(unsigned int irq, struct irq_chip *type, void *data)
247 if (irq_desc[irq].chip != &cpu_interrupt_type) 247 if (irq_desc[irq].chip != &cpu_interrupt_type)
248 return -EBUSY; 248 return -EBUSY;
249 249
250 /* for iosapic interrupts */
250 if (type) { 251 if (type) {
251 irq_desc[irq].chip = type; 252 set_irq_chip_and_handler(irq, type, parisc_do_IRQ);
252 irq_desc[irq].chip_data = data; 253 set_irq_chip_data(irq, data);
253 cpu_interrupt_type.enable(irq); 254 cpu_enable_irq(irq);
254 } 255 }
255 return 0; 256 return 0;
256} 257}
@@ -368,7 +369,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
368 goto set_out; 369 goto set_out;
369 } 370 }
370#endif 371#endif
371 __do_IRQ(irq); 372 generic_handle_irq(irq);
372 373
373 out: 374 out:
374 irq_exit(); 375 irq_exit();
@@ -398,14 +399,14 @@ static void claim_cpu_irqs(void)
398{ 399{
399 int i; 400 int i;
400 for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) { 401 for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) {
401 irq_desc[i].chip = &cpu_interrupt_type; 402 set_irq_chip_and_handler(i, &cpu_interrupt_type, parisc_do_IRQ);
402 } 403 }
403 404
404 irq_desc[TIMER_IRQ].action = &timer_action; 405 set_irq_handler(TIMER_IRQ, handle_percpu_irq);
405 irq_desc[TIMER_IRQ].status = IRQ_PER_CPU; 406 setup_irq(TIMER_IRQ, &timer_action);
406#ifdef CONFIG_SMP 407#ifdef CONFIG_SMP
407 irq_desc[IPI_IRQ].action = &ipi_action; 408 set_irq_handler(IPI_IRQ, handle_percpu_irq);
408 irq_desc[IPI_IRQ].status = IRQ_PER_CPU; 409 setup_irq(IPI_IRQ, &ipi_action);
409#endif 410#endif
410} 411}
411 412
@@ -423,3 +424,8 @@ void __init init_IRQ(void)
423 set_eiem(cpu_eiem); /* EIEM : enable all external intr */ 424 set_eiem(cpu_eiem); /* EIEM : enable all external intr */
424 425
425} 426}
427
428void parisc_do_IRQ(unsigned int irq, struct irq_desc *desc)
429{
430 __do_IRQ(irq);
431}