On Thu, Sep 05, 2013 at 07:39:56AM +1000, Benjamin Herrenschmidt wrote: > Hi Folks ! > > It appears that the current version of irq_exit() calls __do_softirq() > directly rather than do_softirq(). > > That means we are going to call the softirq's in the current interrupt > frame rather than on the separate softirq stack. > > The current frame is also still the normal kernel stack, because > do_IRQ() itself only switches to the interrupt stack for processing > the handlers (it's back to the original stack by the time it calls > irq_exit). > > That means that we end up stacking the normal stack, the actually HW > interrupt stack frame (which can be pretty big on ppc) + do_IRQ's own, > then the softirq (networks stack can create HUGE stack frames) and ... > we are in softirq, so HW irqs are enable, we can thus can another irq > stack frame piled up on top of that (or a perf stack). > > We are observing actual overflows, here's an example blowing up our 16k > stack on ppc64, you notice that it's all on the normal kernel stack:
I see, __do_softirq() is sometimes called to avoid irqsafe and softirq_pending check they are not necessary but OTOH this bypass the arch overriden handler. I'm going to try something and post soon. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

