All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.