Commit 51890613f2bfa70453a5cc22c91c63946dd311cd

Authored by James Bottomley
Committed by Kyle McMartin
1 parent d16cd297d2

parisc: convert the rest of the irq handlers to simple/percpu

The generic conversion eliminates the spurious no_ack and no_end
routines, converts all the cascaded handlers to handle_simple_irq() and
makes iosapic use a modified handle_percpu_irq() to become the same as
the CPU irq's.  This isn't an essential change, but it eliminates the
mask/unmask overhead of handle_level_irq().

Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Tested-by: Helge Deller <deller@gmx.de>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>

Showing 6 changed files with 12 additions and 11 deletions Side-by-side Diff

arch/parisc/kernel/irq.c
... ... @@ -75,9 +75,6 @@
75 75 smp_send_all_nop();
76 76 }
77 77  
78   -void no_ack_irq(unsigned int irq) { }
79   -void no_end_irq(unsigned int irq) { }
80   -
81 78 void cpu_ack_irq(unsigned int irq)
82 79 {
83 80 unsigned long mask = EIEM_MASK(irq);
... ... @@ -241,7 +238,7 @@
241 238  
242 239 /* for iosapic interrupts */
243 240 if (type) {
244   - set_irq_chip_and_handler(irq, type, handle_level_irq);
  241 + set_irq_chip_and_handler(irq, type, handle_percpu_irq);
245 242 set_irq_chip_data(irq, data);
246 243 cpu_unmask_irq(irq);
247 244 }
drivers/parisc/dino.c
... ... @@ -349,7 +349,6 @@
349 349 .name = "GSC-PCI",
350 350 .unmask = dino_unmask_irq,
351 351 .mask = dino_mask_irq,
352   - .ack = no_ack_irq,
353 352 };
354 353  
355 354  
drivers/parisc/eisa.c
... ... @@ -186,7 +186,6 @@
186 186 .name = "EISA",
187 187 .unmask = eisa_unmask_irq,
188 188 .mask = eisa_mask_irq,
189   - .ack = no_ack_irq,
190 189 };
191 190  
192 191 static irqreturn_t eisa_irq(int wax_irq, void *intr_dev)
... ... @@ -340,7 +339,7 @@
340 339 setup_irq(2, &irq2_action);
341 340 for (i = 0; i < 16; i++) {
342 341 set_irq_chip_and_handler(i, &eisa_interrupt_type,
343   - handle_level_irq);
  342 + handle_simple_irq);
344 343 }
345 344  
346 345 EISA_bus = 1;
drivers/parisc/gsc.c
... ... @@ -143,7 +143,6 @@
143 143 .name = "GSC-ASIC",
144 144 .unmask = gsc_asic_unmask_irq,
145 145 .mask = gsc_asic_mask_irq,
146   - .ack = no_ack_irq,
147 146 };
148 147  
149 148 int gsc_assign_irq(struct irq_chip *type, void *data)
... ... @@ -153,7 +152,7 @@
153 152 if (irq > GSC_IRQ_MAX)
154 153 return NO_IRQ;
155 154  
156   - set_irq_chip_and_handler(irq, type, handle_level_irq);
  155 + set_irq_chip_and_handler(irq, type, handle_simple_irq);
157 156 set_irq_chip_data(irq, data);
158 157  
159 158 return irq++;
drivers/parisc/iosapic.c
... ... @@ -669,6 +669,13 @@
669 669 DBG(KERN_DEBUG "enable_irq(%d): eoi(%p, 0x%x)\n", irq,
670 670 vi->eoi_addr, vi->eoi_data);
671 671 iosapic_eoi(vi->eoi_addr, vi->eoi_data);
  672 +}
  673 +
  674 +static void iosapic_eoi_irq(unsigned int irq)
  675 +{
  676 + struct vector_info *vi = get_irq_chip_data(irq);
  677 +
  678 + iosapic_eoi(vi->eoi_addr, vi->eoi_data);
672 679 cpu_eoi_irq(irq);
673 680 }
674 681  
... ... @@ -705,6 +712,7 @@
705 712 .unmask = iosapic_unmask_irq,
706 713 .mask = iosapic_mask_irq,
707 714 .ack = cpu_ack_irq,
  715 + .eoi = iosapic_eoi_irq,
708 716 #ifdef CONFIG_SMP
709 717 .set_affinity = iosapic_set_affinity_irq,
710 718 #endif
drivers/parisc/superio.c
... ... @@ -323,7 +323,6 @@
323 323 .name = SUPERIO,
324 324 .unmask = superio_unmask_irq,
325 325 .mask = superio_mask_irq,
326   - .ack = no_ack_irq,
327 326 };
328 327  
329 328 #ifdef DEBUG_SUPERIO_INIT
... ... @@ -354,7 +353,7 @@
354 353 #endif
355 354  
356 355 for (i = 0; i < 16; i++) {
357   - set_irq_chip_and_handler(i, &superio_interrupt_type, handle_level_irq);
  356 + set_irq_chip_and_handler(i, &superio_interrupt_type, handle_simple_irq);
358 357 }
359 358  
360 359 /*