* [PATCH] parisc: convert the rest of the irq handlers to simple/percpu
@ 2010-12-03 2:01 James Bottomley
2010-12-03 21:27 ` Helge Deller
0 siblings, 1 reply; 3+ messages in thread
From: James Bottomley @ 2010-12-03 2:01 UTC (permalink / raw)
To: Parisc List
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 on raven and pa8800
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c
index 5024f64..ca0730b 100644
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@ -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);
}
diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c
index d9f5148..9383063 100644
--- a/drivers/parisc/dino.c
+++ b/drivers/parisc/dino.c
@@ -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,
};
diff --git a/drivers/parisc/eisa.c b/drivers/parisc/eisa.c
index 1211974..e860038 100644
--- a/drivers/parisc/eisa.c
+++ b/drivers/parisc/eisa.c
@@ -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;
diff --git a/drivers/parisc/gsc.c b/drivers/parisc/gsc.c
index e605298..772b193 100644
--- a/drivers/parisc/gsc.c
+++ b/drivers/parisc/gsc.c
@@ -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++;
diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c
index a3120a0..0327894 100644
--- a/drivers/parisc/iosapic.c
+++ b/drivers/parisc/iosapic.c
@@ -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
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c
index 0846daf..2824153 100644
--- a/drivers/parisc/superio.c
+++ b/drivers/parisc/superio.c
@@ -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);
}
/*
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] parisc: convert the rest of the irq handlers to simple/percpu
2010-12-03 2:01 [PATCH] parisc: convert the rest of the irq handlers to simple/percpu James Bottomley
@ 2010-12-03 21:27 ` Helge Deller
2010-12-03 22:40 ` James Bottomley
0 siblings, 1 reply; 3+ messages in thread
From: Helge Deller @ 2010-12-03 21:27 UTC (permalink / raw)
To: James Bottomley; +Cc: Parisc List
On 12/03/2010 03:01 AM, James Bottomley wrote:
> 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>
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] parisc: convert the rest of the irq handlers to simple/percpu
2010-12-03 21:27 ` Helge Deller
@ 2010-12-03 22:40 ` James Bottomley
0 siblings, 0 replies; 3+ messages in thread
From: James Bottomley @ 2010-12-03 22:40 UTC (permalink / raw)
To: Helge Deller; +Cc: Parisc List
On Fri, 2010-12-03 at 22:27 +0100, Helge Deller wrote:
> On 12/03/2010 03:01 AM, James Bottomley wrote:
> > 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>
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-12-03 22:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-03 2:01 [PATCH] parisc: convert the rest of the irq handlers to simple/percpu James Bottomley
2010-12-03 21:27 ` Helge Deller
2010-12-03 22:40 ` James Bottomley
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.