Re: [PATCH 0/2] [GIT PULL] tracing: various bug fixes
From: Jeremy Fitzhardinge
Date: Wed Apr 22 2009 - 13:17:59 EST
Frederic Weisbecker wrote:
On Wed, Apr 22, 2009 at 09:49:14AM -0400, Steven Rostedt wrote:
On Wed, 22 Apr 2009, Frederic Weisbecker wrote:
I spent the entire day (and half the night) debugging this. I was fighting
a case where the hardirqs_enabled flag in the task struct (lockdep flag)
was mysteriously being set and cleared. I stepped through the entire
kernel thread fork process (that was an exercise) and could not find
anything wrong.
Sometimes it would go away with printk's sometimes it would not. This was
driving me crazy, until I noticed that paravirt was enabled.
Turning off paravirtualization here (so far) makes everything run
smoothly.
Thus my theory is that there's something fishy with the modifying of the
irq enable/disable code when the system detects that it is running on bare
hardware.
I'm too tired to look at this more. Ingo supplied a config to play with.
You can disable VSMP too and it will still trigger the crash.
-- Steve
It's indeed a tricky one. I can reproduce it too, I will
try to manage having an irqsoff trace at this point, hopefully I
could get the source of this irq disabling...
It doesn't disable interrupts :-/
It is the hardirqs_enabled flag in the task struct that mysteriously turns
off and back on. I put in printks when it is off in fork, and the next
printk shows that it turns back on (between the printks!!!).
I printed the output of "irqs_disabled()" on each of these printks and
interrupts are always enabled. It is only the hardirqs_enabled flag that
is giving strange outputs.
Oh, weird...
Do you have CONFIG_PARAVIRT on? When I disabled it, I have yet to
reproduce the bug. But I've only rebooted a few times. I'm going to
continue to reboot to see if I can trigger it.
Yes it is enabled.
I'm thinking that the paravirt alternative code may have clobbered a
register in either the enable or disabling of interrupts. This might cause
a strange value to go into the hardirqs_enabled flag.
Ok I will try it without PARAVIRT and tell you if I can reproduce it.
Interesting. What code is generated for native_irq_enable/disable?
J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/