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-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html