Thread (4 messages) flat view 4 messages, 2 authors, 2012-10-28

irq_set_chained_handler() called too early for hwirq to be initialized

From: Thomas Gleixner <hidden>
Date: 2012-10-28 18:46:22
Also in: lkml

On Sun, 28 Oct 2012, Roland Stigge wrote:
On 28/10/12 18:34, Thomas Gleixner wrote:
quoted
On Sun, 28 Oct 2012, Roland Stigge wrote:
quoted
consider arch/arm/mach-lpc32xx/irq.c: irq_set_chained_handler() is
called at a point where it accesses
irq_to_desc(IRQ_LPC32XX_SUB2IRQ)->irq_data.hwirq but which is not yet
initialized.
None of the functions which are called inside of
irq_set_chained_handler() touches desc->irq_data.hwirq.

So what are you talking about?
Via the call trace:

irq_set_chained_handler()
-> __irq_set_handler()
-> irq_startup()
-> irq_enable()
-> desc->irq_data.chip->irq_unmask()
That's right. Though your description was so vague that I really could
not figure that out.
 
Still, my question remains if I can move the irq_set_chained_handler()
calls to after of_irq_init() and irq_domain_add_legacy() since only the
latter initializes hwirq.
That's not a question. You MUST do that. And there is no reason why
you can't.
quoted
If those interrupts would not be preallocated, then the code would
fail to initialize any interrupt at all. And of course nothing would
notice as all function calls to set_irq_* do not check the return
value.
Do you mean mach-lpc32xx/irq.c's calls to set_irq_* not checking the
return values? Maybe because those are declared "void"?

static inline void
irq_set_chained_handler(unsigned int irq, irq_flow_handler_t handle);
void set_irq_flags(unsigned int irq, unsigned int iflags);
static inline void irq_set_chip_and_handler(unsigned int irq,
                                            struct irq_chip *chip,
                                            irq_flow_handler_t handle);
Bah. Yes. We should change that or at least put a warning into the
core code.

Thanks,

	tglx
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help