parisc: convert the rest of the irq handlers to simple/percpu
James Bottomley
maintainerPATCH 1/1 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().
---
Tested on raven and pa8800
arch/parisc/kernel/irq.c +1 -4
@@ -75,9 +75,6 @@ static void cpu_unmask_irq(unsigned int irq)smp_send_all_nop (); } -void no_ack_irq (unsigned int irq) { } -void no_end_irq (unsigned int irq) { } -void cpu_ack_irq (unsigned int irq) {unsigned long mask =EIEM_MASK (irq);
@@ -241,7 +238,7 @@ int cpu_claim_irq(unsigned int irq, struct irq_chip *type, void *data)/* for iosapic interrupts */ if (type) { -set_irq_chip_and_handler (irq, type, handle_level_irq); +set_irq_chip_and_handler (irq, type, handle_percpu_irq);set_irq_chip_data (irq, data);cpu_unmask_irq (irq); }
drivers/parisc/dino.c +0 -1
@@ -349,7 +349,6 @@ static struct irq_chip dino_interrupt_type = { .name = "GSC-PCI", .unmask = dino_unmask_irq, .mask = dino_mask_irq, - .ack = no_ack_irq, };
drivers/parisc/eisa.c +1 -2
@@ -186,7 +186,6 @@ static struct irq_chip eisa_interrupt_type = { .name = "EISA", .unmask = eisa_unmask_irq, .mask = eisa_mask_irq, - .ack = no_ack_irq, };static irqreturn_t eisa_irq (int wax_irq,void *intr_dev)
@@ -340,7 +339,7 @@ static int __init eisa_probe(struct parisc_device *dev)setup_irq (2 , &irq2_action);for (i =0 ; i <16 ; i++) {set_irq_chip_and_handler (i, &eisa_interrupt_type, - handle_level_irq); + handle_simple_irq); } EISA_bus =1 ;
drivers/parisc/gsc.c +1 -2
@@ -143,7 +143,6 @@ static struct irq_chip gsc_asic_interrupt_type = { .name = "GSC-ASIC", .unmask = gsc_asic_unmask_irq, .mask = gsc_asic_mask_irq, - .ack = no_ack_irq, };int gsc_assign_irq (struct irq_chip *type,void *data)
@@ -153,7 +152,7 @@ int gsc_assign_irq(struct irq_chip *type, void *data)if (irq >GSC_IRQ_MAX )return NO_IRQ ; -set_irq_chip_and_handler (irq, type, handle_level_irq); +set_irq_chip_and_handler (irq, type, handle_simple_irq);set_irq_chip_data (irq, data);return irq++;
drivers/parisc/iosapic.c +8 -0
@@ -669,6 +669,13 @@ printk("\n");DBG (KERN_DEBUG "enable_irq(%d): eoi(%p, 0x%x)\n" , irq, vi->eoi_addr, vi->eoi_data);iosapic_eoi (vi->eoi_addr, vi->eoi_data); +} + +static void iosapic_eoi_irq (unsigned int irq) +{ +struct vector_info *vi =get_irq_chip_data (irq); + +iosapic_eoi (vi->eoi_addr, vi->eoi_data);cpu_eoi_irq (irq); }
@@ -705,6 +712,7 @@ static struct irq_chip iosapic_interrupt_type = { .unmask = iosapic_unmask_irq, .mask = iosapic_mask_irq, .ack = cpu_ack_irq, + .eoi = iosapic_eoi_irq,#ifdef CONFIG_SMP .set_affinity = iosapic_set_affinity_irq,#endif
drivers/parisc/superio.c +1 -2
@@ -323,7 +323,6 @@ static struct irq_chip superio_interrupt_type = { .name = SUPERIO, .unmask = superio_unmask_irq, .mask = superio_mask_irq, - .ack = no_ack_irq, };#ifdef DEBUG_SUPERIO_INIT
@@ -354,7 +353,7 @@ int superio_fixup_irq(struct pci_dev *pcidev)#endif for (i =0 ; i <16 ; i++) { -set_irq_chip_and_handler (i, &superio_interrupt_type, handle_level_irq); +set_irq_chip_and_handler (i, &superio_interrupt_type, handle_simple_irq); }/*
Helge Deller
maintainerQuoted 7 lines · James Bottomley
The generic conversion eliminates the spurious
no_ackandno_endroutines, converts all the cascaded handlers tohandle_simple_irq()and makes iosapic use a modifiedhandle_percpu_irq()to become the same as the CPU irq's. This isn't an essential change, but it eliminates the mask/unmask overhead ofhandle_level_irq().Signed-off-by James Bottomley<[email protected]>
Nice patches James! (although I only reply to this one)
They work for me on 715/64, B160L and c3000. Can you or Kyle send those patches upstream for 2.6.37?
Helge
James Bottomley
maintainerQuoted 7 lines · Helge Deller
Quoted 6 lines · James Bottomley
The generic conversion eliminates the spurious
no_ackandno_endroutines, converts all the cascaded handlers tohandle_simple_irq()and makes iosapic use a modifiedhandle_percpu_irq()to become the same as the CPU irq's. This isn't an essential change, but it eliminates the mask/unmask overhead ofhandle_level_irq().
Quoted 5 lines
Quoted 1 line
Signed-off-by James Bottomley<[email protected]>Nice patches James! (although I only reply to this one)
They work for me on 715/64, B160L and c3000. Can you or Kyle send those patches upstream for 2.6.37?
Sure, although kyle was also going to post a different patch, I think ... we only need the one liner upstream to make everything work. The rest is just a conversion to more simplistic handlers which can wait for the merge window.
James