From: ben-linux@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] s3c24xx: Fix handling of level irqs for external interrupts.
Date: Wed, 12 May 2010 02:01:20 +0100 [thread overview]
Message-ID: <20100512010119.GK2589@trinity.fluff.org> (raw)
In-Reply-To: <1273620530-20717-1-git-send-email-lars@metafoo.de>
On Wed, May 12, 2010 at 01:28:50AM +0200, Lars-Peter Clausen wrote:
> Although the external interrupts support level and edge triggered irqs their
> handler is currently always set to handle_edge_irq().
> While being technically wrong for a level triggered irq to be handled by
> handle_edge_irq() it will cause serious problems in combination with a oneshot
> irq. handle_edge_irq() will unmask the irq immediately and as a result the irq
> will be triggered again before the threaded irq handler had a chance to run and
> clear the irq source.
>
> Thus level triggered irqs should be handled by handle_level_irq.
> According to the specs the irq controller will remember if an irq has been
> triggered while it had been masked and will issue it when the irq gets
> unmasked. Thus it is sufficient to use handle_level_irq() for edge triggered
> irqs as well. Hence handle_level_irq() can always be used for external
> interrupts.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Ok, can someone else test this on some s3c24xx type machines?
---
> arch/arm/plat-s3c24xx/irq.c | 6 ++----
> 1 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c
> index ad0d44e..0bd7fc2 100644
> --- a/arch/arm/plat-s3c24xx/irq.c
> +++ b/arch/arm/plat-s3c24xx/irq.c
> @@ -631,15 +631,13 @@ void __init s3c24xx_init_irq(void)
>
> for (irqno = IRQ_EINT0; irqno <= IRQ_EINT3; irqno++) {
> irqdbf("registering irq %d (ext int)\n", irqno);
> - set_irq_chip(irqno, &s3c_irq_eint0t4);
> - set_irq_handler(irqno, handle_edge_irq);
> + set_irq_chip_and_handler(irqno, &s3c_irq_eint0t4, handle_level_irq);
> set_irq_flags(irqno, IRQF_VALID);
> }
I'd have rather youd just change the set_irq_handler() call instead of
merging the two together and changing the handle_level_irq.
> for (irqno = IRQ_EINT4; irqno <= IRQ_EINT23; irqno++) {
> irqdbf("registering irq %d (extended s3c irq)\n", irqno);
> - set_irq_chip(irqno, &s3c_irqext_chip);
> - set_irq_handler(irqno, handle_edge_irq);
> + set_irq_chip_and_handler(irqno, &s3c_irqext_chip, handle_level_irq);
> set_irq_flags(irqno, IRQF_VALID);
> }
>
> --
> 1.5.6.5
>
--
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
prev parent reply other threads:[~2010-05-12 1:01 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-11 23:28 [PATCH] s3c24xx: Fix handling of level irqs for external interrupts Lars-Peter Clausen
2010-05-12 1:01 ` Ben Dooks [this message]
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=20100512010119.GK2589@trinity.fluff.org \
--to=ben-linux@fluff.org \
--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.