All of lore.kernel.org
 help / color / mirror / Atom feed
From: tglx@linutronix.de (Thomas Gleixner)
To: linux-arm-kernel@lists.infradead.org
Subject: [patch 01/23] arm: Ns9xxx: Remove private irq flow handler
Date: Fri, 25 Mar 2011 13:21:50 -0000	[thread overview]
Message-ID: <20110325132047.456346554@linutronix.de> (raw)
In-Reply-To: 20110325131617.258789658@linutronix.de

An embedded and charset-unspecified text was scrubbed...
Name: arm-ns9xxx-remove-private-irq-flow-handler.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110325/fc1be487/attachment.ksh>

WARNING: multiple messages have this Message-ID (diff)
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: LAK <linux-arm-kernel@lists.infradead.org>,
	Russell King <linux@arm.linux.org.uk>,
	Lennert Buytenhek <buytenh@wantstofly.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
Subject: [patch 01/23] arm: Ns9xxx: Remove private irq flow handler
Date: Fri, 25 Mar 2011 13:21:50 -0000	[thread overview]
Message-ID: <20110325132047.456346554@linutronix.de> (raw)
In-Reply-To: 20110325131617.258789658@linutronix.de

[-- Attachment #1: arm-ns9xxx-remove-private-irq-flow-handler.patch --]
[-- Type: text/plain, Size: 4141 bytes --]

handle_prio_irq is almost identical with handle_fasteoi_irq. The
subtle differences are

1) The handler checks for IRQ_DISABLED after the device handler has
   been called. In case it's set it masks the interrupt.

2) When the handler sees IRQ_DISABLED on entry it masks the interupt
   in the same way as handle_fastoei_irq, but does not set the
   IRQ_PENDING flag.

3) Instead of gracefully handling a recursive interrupt it crashes the
   kernel.

#1 is just relevant when a device handler calls disable_irq_nosync()
   and it does not matter whether we mask the interrupt right away or
   not. We handle lazy masking for disable_irq anyway, so there is no
   real reason to have this extra mask in place.

#2 will prevent the resend of a pending interrupt, which can result in
   lost interrupts for edge type interrupts. For level type interrupts
   the resend is a noop in the generic code. According to the
   datasheet all interrupts are level type, so marking them as such
   will result in the exact same behaviour as the private
   handle_prio_irq implementation.

#3 is just stupid. Crashing the kernel instead of handling a problem
   gracefully is just wrong. With the current semantics- all handlers
   run with interrupts disabled - this is even more wrong.

Rename ack to eoi, remove the unused mask_ack, switch to
handle_fasteoi_irq and remove the private function.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Acked-by: Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
Cc: linux-arm-kernel@lists.infradead.org
LKML-Reference: <20110202212552.299898447@linutronix.de>
---
 arch/arm/mach-ns9xxx/irq.c |   58 +++------------------------------------------
 1 file changed, 4 insertions(+), 54 deletions(-)

Index: linux-2.6-tip/arch/arm/mach-ns9xxx/irq.c
===================================================================
--- linux-2.6-tip.orig/arch/arm/mach-ns9xxx/irq.c
+++ linux-2.6-tip/arch/arm/mach-ns9xxx/irq.c
@@ -31,17 +31,11 @@ static void ns9xxx_mask_irq(struct irq_d
 	__raw_writel(ic, SYS_IC(prio / 4));
 }
 
-static void ns9xxx_ack_irq(struct irq_data *d)
+static void ns9xxx_eoi_irq(struct irq_data *d)
 {
 	__raw_writel(0, SYS_ISRADDR);
 }
 
-static void ns9xxx_maskack_irq(struct irq_data *d)
-{
-	ns9xxx_mask_irq(d);
-	ns9xxx_ack_irq(d);
-}
-
 static void ns9xxx_unmask_irq(struct irq_data *d)
 {
 	/* XXX: better use cpp symbols */
@@ -52,56 +46,11 @@ static void ns9xxx_unmask_irq(struct irq
 }
 
 static struct irq_chip ns9xxx_chip = {
-	.irq_ack	= ns9xxx_ack_irq,
+	.irq_eoi	= ns9xxx_eoi_irq,
 	.irq_mask	= ns9xxx_mask_irq,
-	.irq_mask_ack	= ns9xxx_maskack_irq,
 	.irq_unmask	= ns9xxx_unmask_irq,
 };
 
-#if 0
-#define handle_irq handle_level_irq
-#else
-static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
-{
-	struct irqaction *action;
-	irqreturn_t action_ret;
-
-	raw_spin_lock(&desc->lock);
-
-	BUG_ON(desc->status & IRQ_INPROGRESS);
-
-	desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
-	kstat_incr_irqs_this_cpu(irq, desc);
-
-	action = desc->action;
-	if (unlikely(!action || (desc->status & IRQ_DISABLED)))
-		goto out_mask;
-
-	desc->status |= IRQ_INPROGRESS;
-	raw_spin_unlock(&desc->lock);
-
-	action_ret = handle_IRQ_event(irq, action);
-
-	/* XXX: There is no direct way to access noirqdebug, so check
-	 * unconditionally for spurious irqs...
-	 * Maybe this function should go to kernel/irq/chip.c? */
-	note_interrupt(irq, desc, action_ret);
-
-	raw_spin_lock(&desc->lock);
-	desc->status &= ~IRQ_INPROGRESS;
-
-	if (desc->status & IRQ_DISABLED)
-out_mask:
-		desc->irq_data.chip->irq_mask(&desc->irq_data);
-
-	/* ack unconditionally to unmask lower prio irqs */
-	desc->irq_data.chip->irq_ack(&desc->irq_data);
-
-	raw_spin_unlock(&desc->lock);
-}
-#define handle_irq handle_prio_irq
-#endif
-
 void __init ns9xxx_init_irq(void)
 {
 	int i;
@@ -119,7 +68,8 @@ void __init ns9xxx_init_irq(void)
 
 	for (i = 0; i <= 31; ++i) {
 		set_irq_chip(i, &ns9xxx_chip);
-		set_irq_handler(i, handle_irq);
+		set_irq_handler(i, handle_fasteoi_irq);
 		set_irq_flags(i, IRQF_VALID);
+		irq_set_status_flags(i, IRQ_LEVEL);
 	}
 }



  reply	other threads:[~2011-03-25 13:21 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-25 13:21 [patch 00/23] ARM: Final genirq cleanup Thomas Gleixner
2011-03-25 13:21 ` Thomas Gleixner
2011-03-25 13:21 ` Thomas Gleixner [this message]
2011-03-25 13:21   ` [patch 01/23] arm: Ns9xxx: Remove private irq flow handler Thomas Gleixner
2011-03-25 13:21 ` [patch 02/23] arm: tegra: Remove unused function which fiddles with irq_desc Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
     [not found]   ` <20110325132047.552074703-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2011-03-26 20:12     ` Varun Wadekar
2011-03-26 20:12       ` Varun Wadekar
2011-03-26 20:12       ` Varun Wadekar
     [not found]       ` <4D8E4897.5030705-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-03-26 20:24         ` Thomas Gleixner
2011-03-26 20:24           ` Thomas Gleixner
2011-03-26 20:24           ` Thomas Gleixner
     [not found]           ` <alpine.LFD.2.00.1103262118010.31464-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
2011-03-26 22:37             ` Colin Cross
2011-03-26 22:37               ` Colin Cross
2011-03-26 22:37               ` Colin Cross
     [not found]               ` <AANLkTi=y9JkpJVCq5G151G9k3d0rAcSH13gi6uGB_gDX-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-03-27  8:07                 ` Thomas Gleixner
2011-03-27  8:07                   ` Thomas Gleixner
2011-03-27  8:07                   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 03/23] arm: Use genirq lockdep helper to set lock class Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 04/23] arm: Use irq flag setter function Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 05/23] arm: msm: Convert to new irq chip functions Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 06/23] arm: Cleanup irq_desc access Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 07/23] arm: plat-samsung: Use proper irq accessor functions Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 08/23] arm: stmp3xxx: Use generic_handle_irq() Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:21 ` [patch 09/23] arm: nomadik: Use local irq state Thomas Gleixner
2011-03-25 13:21   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 10/23] arm: plat-omap: Cleanup irq_desc access Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 11/23] arm: msm: Use proper irq accessor functions Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 12/23] arm: vt8500: Use proper irq accessors Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 13/23] arm: mxc: Use generic_handle_irq() Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 14/23] arm: gemini: Use proper irq accessor functions Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 15/23] arm: ep93xx: " Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 16/23] arm: davinci: Cleanup irq chip code Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 17/23] arm: at91: Cleanup irq chip Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 21:03   ` Thomas Gleixner
2011-03-25 21:03     ` Thomas Gleixner
2011-03-27 15:02     ` Sergei Shtylyov
2011-03-27 15:02       ` Sergei Shtylyov
2011-03-27 15:47       ` Thomas Gleixner
2011-03-27 15:47         ` Thomas Gleixner
2011-03-25 13:22 ` [patch 18/23] arm: gic: Use proper accessor functions Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 19/23] arm: dove: Use proper irq " Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 20/23] arm: Use generic show_interrupts() Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 21/23] arm: Cleanup the irq namespace Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-04-18 17:43   ` H Hartley Sweeten
2011-04-18 17:43     ` H Hartley Sweeten
2011-03-25 13:22 ` [patch 22/23] arm: Reorder irq_set_ function calls Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner
2011-03-25 13:22 ` [patch 23/23] arm: Fold irq_set_chip/irq_set_handler Thomas Gleixner
2011-03-25 13:22   ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110325132047.456346554@linutronix.de \
    --to=tglx@linutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.