Messages in this thread | | | Date | Thu, 7 Nov 2013 15:12:23 +0100 | Subject | Re: [patch 1/6] hardirq: Make hardirq bits generic | From | Geert Uytterhoeven <> |
| |
Hi Thomas,
On Wed, Nov 6, 2013 at 6:23 PM, Thomas Gleixner <tglx@linutronix.de> 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@linux-m68k.org
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
| |