Hi Thomas, On Wed, Nov 6, 2013 at 6:23 PM, Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: >> Also note that the value of "nested" doesn't match the indentation level, >> which depends on my own bookkeeping using "nesting". > > Well, nested is just an indicator. It's not the nest level. I know, the only thing that matters is whether it's zero or not. But it should always be zero if there's no nesting, and non-zero if there is, right? So: # irq 13 nested 1024 nested should be 0 here. # irq 4 nested 0 ok # irq 13 nested 1024 ok (two extra spaces in front of "irq"). # irq 4 nested 0 nested should be non-zero here. > nested = pt->sr & ~ALLOWINT; > i.e.: > nested = pt->sr & 0x0700; > > So in the case above nested is 0x400 > >> Anyone with an idea where it's going wrong? > > The original code does: > > add_preempt_count(HARDIRQ_OFFSET); > > do_IRQ() > irq_enter(); > add_preempt_count(HARDIRQ_OFFSET); > > handle_irq(); > > irq_exit(); > local_irq_disable(); > sub_preempt_count(HARDIRQ_OFFSET); > > sub_preempt_count(HARDIRQ_OFFSET); > > /* Check for nested irq */ > if (in_hardirq()) > reti(); > > /* Check for nested irq again */ > if (pt->sr & ~ALLOWINT != 0) > reti(); > > do_softirq(); > .... > ret_from_exception(); > > With the patches in place it looks like this: > > do_IRQ() > nested = pt->sr & ~ALLOWINT; > > irq_enter(); > add_preempt_count(HARDIRQ_OFFSET); > > handle_irq(); > > irq_exit_nested(nested); > local_irq_disable(); > sub_preempt_count(HARDIRQ_OFFSET); > if (!nested && !in_hardirq()) > do_softirq() > > return nested; > > if (nested) > reti(); > > ret_from_exception(); > > So all it does essentially is to move the softirq invocation in the > non nested case a tad earlier. I'm really puzzled as I can't spot the > point where this change makes a real difference. Yes, that's also my understanding. But I can't spot it neither :-( Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html