Messages in this thread | | | Subject | Re: [REGRESSION] threaded interrupt handler support breaks (some) irq handling on AVR32 | From | Ben Nizette <> | Date | Wed, 15 Apr 2009 11:30:53 +1000 |
| |
On Tue, 2009-04-14 at 18:37 +1000, Ben Nizette wrote:
> If no one beats me to it i'll try and scatter printks and narrow down > exactly *where* it all explodes tomorrow.
static irqreturn_t ads7846_irq(int irq, void *handle) { struct ads7846 *ts = handle; unsigned long flags;
spin_lock_irqsave(&ts->lock, flags); if (likely(get_pendown_state(ts))) { if (!ts->irq_disabled) { /* The ARM do_simple_IRQ() dispatcher doesn't act * like the other dispatchers: it will report IRQs * even after they've been disabled. We work around * that here. (The "generic irq" framework may help...) */ ts->irq_disabled = 1; disable_irq(ts->spi->irq); ts->pending = 1; hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY), HRTIMER_MODE_REL); } } spin_unlock_irqrestore(&ts->lock, flags);
return IRQ_HANDLED; }
Right, a scattering of printks in there shows execution gets at least as far as inside the inner-most code block. A printk directly before the disable_irq() doesn't make it to my console so I'm guessing that the hang is in there somewhere.
Hope this helps, --Ben.
| |