![]() | |||||||||||||
Messages in this thread |
* Steven Rostedt <rostedt@goodmis.org> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ | ||||||||||||
| Last update: 2006-05-12 10:19 [from the cache] ©2003-2008 | |||||||||||||