On Fri, Sep 20, 2013 at 9:26 AM, Frederic Weisbecker <fweis...@gmail.com> wrote: > > Now just for clarity, what do we then do with inline sofirq executions: on > local_bh_enable() > for example, or explicit calls to do_softirq() other than irq exit?
If we do a softirq because it was pending and we did a "local_bh_enable()" in normal code, we need a new stack. The "local_bh_enable()" may be pretty deep in the callchain on a normal process stack, so I think it would be safest to switch to a separate stack for softirq handling. So you have a few different cases: - irq_exit(). The irq stack is by definition empty (assuming itq_exit() is done on the irq stack), so doing softirq in that context should be fine. However, that assumes that if we get *another* interrupt, then we'll switch stacks again, so this does mean that we need two irq stacks. No, irq's don't nest, but if we run softirq on the first irq stack, the other irq *can* nest that softirq. - process context doing local_bh_enable, and a bh became pending while it was disabled. See above: this needs a stack switch. Which stack to use is open, again assuming that a hardirq coming in will switch to yet another stack. Hmm? Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/