Philippe Gerum wrote:
On Sat, 2007-04-14 at 17:29 -0600, Terry Laurenzo wrote:
Philippe,
Thanks for looking into this, but I discovered that it was a false
alarm due to some juvenile broken code on my end. There must be some
subtle difference between old->new ipipe/kernel that was causing this
to not blow up on the old, but the problem was mine I believe.
In my main() function I had a piece of debugging code just before a
pause() call after everything was inited. The debugging code sat in
an infinite loop displaying some basic stats every 2 seconds. At some
point I had commented out the contents of the for(;;) loop but not the
loop itself, so that instead of hitting pause() the main() function
was just infinite looping (I hardly ever look at the file containing
main()). Even though this thread was not supposed to be in a rt
context, it did a lot of rt initialization and must have been
temporarily switched to a rt context so that the infinite loop was
running at a higher priority than the linux domain.
I think there is still some weirdness going on here but fixing my code
to not be stupid solved the immediate problem. In addition, printing
to the console prior to the infinite loop seems to pull the main()
thread back into Linux-land and everything works correctly then.
If the main thread has been explicitely shadowed by a Xenomai task (i.e.
rt_task_shadow), then it's plausible. Writing to the console would
switch the thread to secondary mode in order to use regular Linux
services, and would also allow non real-time device interrupts to flow
down to the Linux kernel while running the loop.
In this situation, the main thread was *not* shadowed through a call to
rt_task_shadow, yet somehow the main thread was getting some form of
real-time priority and stalling other things. When I get a chance, I
will try to produce a stripped down test case that duplicates the behavior.
Terry
_______________________________________________
Uclinux-dist-devel mailing list
[EMAIL PROTECTED]
http://blackfin.uclinux.org/mailman/listinfo/uclinux-dist-devel