On Fri, Feb 22, 2013 at 7:06 AM, Thomas Gleixner <t...@linutronix.de> wrote: >> >> I prefer to let you guys have the final word on this patch. Whether you >> apply it or not, I fear I'll never be entirely happy either way :) >> That's the sad fate of dealing with circular dependencies... > > plus the butt ugly softirq semantics or the lack thereof ...
The softirq semantics are perfectly fine. Don't blame softirq for the fact that irq_exit() has had shit-for-brains for a long time. Just move the whole "invoke_softirq()" thing down to *after* the tick_nohz_irq_exit() stuff. And that "wakeup_softirqd()" is garbage too, since the whole thing should only be used for the "force_irqthreads" case (which invoke_softirq()" got right. And get rid of that final #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED local_irq_restore(flags); #endif because even if the architecture enters irq_exit() with interrupts enabled, we should damn well exit with them disabled so that there are no races with new recursive interrupts (other than the ones that wakeup_softirqd already handled). In other words, I think all those special cases are indeed indicative of something being wrong, but that "something" is not the softirq code. Don't blame that. Blame the fact that irq_exit() is simply written wrong. The softirq code should be done last (it used to be done from the asm code), and the whole comment about tick_nohz_irq_exit() perhaps changing something looks like pure and utter garbage. Don't blame the wrong code here. 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/