lkml.org 
[lkml]   [2011]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Why does handle_simple_irq() require IRQ's to be disabled?

Hi Thomas,

On Mon, 6 Jun 2011 18:18:41 +0200 (CEST)
Thomas Gleixner <tglx@linutronix.de> wrote:

> On Mon, 6 Jun 2011, David Jander wrote:
> >
> > Hi,
> >
> > I am trying to implement/fix interrupt controller functionality in
> > gpio/pca953x.c, and for some reason which I don't understand, I need to
> > disable interrupts with local_irq_disable() before calling
> > generic_handle_irq(). This does not seem right.
> > If I follow the code of handle_simple_irq(), the handler function setup for
> > this IRQ, I get to handle_irq_event_percpu(), which has a
> > WARN_ONCE(!irqs_disabled(),...
> > This WARN is triggered, since nobody explicitly disables interrupts. Why?
> >
> > generic_hanlde_irq() is called from a threaded interrupt handler of the
> > parent of this interrupt controller, and calling local_irq_disable() here
> > seems like a crime. What am I doing wrong?
>
> handle_nested_irq() is your friend.

Thanks! This worked without disabling IRQ's.
One last question, though:

I set up the handler using irq_set_chip_and_handler(irq, ...,
handle_simple_irq);
From the interrupt thread, I call handle_nested_irq(). Is it OK, that in this
case, the defined handler function (handle_simple_irq) is not used? Does this
still make sense? Wouldn't calling just irq_set_chip() be enough here (it
seems to work correctly)?

Best regards,

--
David Jander
Protonic Holland.


\
 
 \ /
  Last update: 2011-06-07 09:07    [W:0.086 / U:0.388 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site