Re: rt20 patch question

From: Ingo Molnar
Date: Fri May 12 2006 - 04:16:11 EST



* Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:

> Ingo,
>
> I traced this down. It is caused by the disable_irq in vortex_timer
> that is called via run_timer_softirq.
>
> disable_irq can call synchronize_irq which can schedule.
>
> And thus you get this bug since we are in a softirq.

hm. When there are threaded interrupts, we quite naturally have to
synchronize via scheduling, in synchronize_irq() - the interrupt we are
waiting on might be scheduled away!

> So I guess we have a case that we can schedule, but while atomic and
> BUG when it's really not bad. Should we add something like this:

that's not good enough, we must not schedule with the preempt_count()
set.

one solution would be to forbid disable_irq() from softirq contexts, and
to convert the vortex timeout function to a workqueue and use the
*_delayed_work() APIs to drive it - and cross fingers there's not many
places to fix.

another solution would be to make softirqs preemptible if they are
threaded. I'm a bit uneasy about that though. In that case we'd also
have to make HARDIRQ threading dependent on softirq threading, in the
Kconfig.

Ingo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/