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>

authored by James Bottomley and committed by Kyle McMartin 51890613 d16cd297

+12 -11
+1 -4
arch/parisc/kernel/irq.c
··· 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); ··· 238 241 239 242 /* for iosapic interrupts */ 240 243 if (type) { 241 - set_irq_chip_and_handler(irq, type, handle_level_irq); 244 + set_irq_chip_and_handler(irq, type, handle_percpu_irq); 242 245 set_irq_chip_data(irq, data); 243 246 cpu_unmask_irq(irq); 244 247 }
-1
drivers/parisc/dino.c
··· 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
+1 -2
drivers/parisc/eisa.c
··· 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) ··· 339 340 setup_irq(2, &irq2_action); 340 341 for (i = 0; i < 16; i++) { 341 342 set_irq_chip_and_handler(i, &eisa_interrupt_type, 342 - handle_level_irq); 343 + handle_simple_irq); 343 344 } 344 345 345 346 EISA_bus = 1;
+1 -2
drivers/parisc/gsc.c
··· 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) ··· 152 153 if (irq > GSC_IRQ_MAX) 153 154 return NO_IRQ; 154 155 155 - set_irq_chip_and_handler(irq, type, handle_level_irq); 156 + set_irq_chip_and_handler(irq, type, handle_simple_irq); 156 157 set_irq_chip_data(irq, data); 157 158 158 159 return irq++;
+8
drivers/parisc/iosapic.c
··· 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 ··· 712 705 .unmask = iosapic_unmask_irq, 713 706 .mask = iosapic_mask_irq, 714 707 .ack = cpu_ack_irq, 708 + .eoi = iosapic_eoi_irq, 715 709 #ifdef CONFIG_SMP 716 710 .set_affinity = iosapic_set_affinity_irq, 717 711 #endif
+1 -2
drivers/parisc/superio.c
··· 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 ··· 353 354 #endif 354 355 355 356 for (i = 0; i < 16; i++) { 356 - set_irq_chip_and_handler(i, &superio_interrupt_type, handle_level_irq); 357 + set_irq_chip_and_handler(i, &superio_interrupt_type, handle_simple_irq); 357 358 } 358 359 359 360 /*