KSE/ia64 broken

Daniel Eischen eischen at vigrid.com
Sun Nov 16 13:55:46 PST 2003


On Sun, 16 Nov 2003, Marcel Moolenaar wrote:

> On Sun, Nov 16, 2003 at 03:09:14PM -0500, Daniel Eischen wrote:
> > On Sun, 16 Nov 2003, Marcel Moolenaar wrote:
> > > On Sun, Nov 16, 2003 at 02:30:20PM -0500, Daniel Eischen wrote:
> > > 
> > > > What should I be looking at, [um]c_flags?
> > > 
> > > mc_flags is very informative.
> > > 
> > > >   $ simple
> > > >   Found completed thread 6000000000014000, uc_flags 0x0, mc_flags 0x8, name initial thread
> > > 
> > > This is a context created by the kernel. It's one created by getcontext().
> > 
> > I'm not sure what you mean by "created by getcontext()".  You
> > mean get_mcontext(), the syscall getcontext(), or userland
> > _ia64_save_context()?  It shouldn't be from the syscall getcontext()
> > because it is the initial thread.
> 
> I meant getcontext(2). _ia64_save_context() always creates contexts
> that have mc_flags=0. Note that all synchronuous contexts created
> by the kernel have valid return registers. It's not only getcontext(2)
> that does that. I was sloppy. The context could be the result of an
> upcall due to a blocking system call.

I think it should be the result of being blocked, probably in
malloc() and sbrk().  When we were using KSE locks for spinlocks,
upcalls were disabled.

> > > Only the kernel needs to preserve the return registers (which is what
> > > mc_flags indicates) because it needs to be able to resume system calls.
> > > 
> > > >   Switching out thread 6000000000014000, state 0
> > > >   Threads in waiting queue:
> > > >   Found completed thread 6000000000014000, uc_flags 0x0, mc_flags 0x3, name initial thread
> > > 
> > > This is an asynchronuous context. Probably the result of a trap, but
> > > possibly the result of an interrupt. Does this mean that the thread
> > > has run since it was last found (i.e. the previous context) or do we
> > > have a case where a context is clobbered (I don't see a switch in)?
> > 
> > Yes, this is the main thread and has run, blocked, and now completed.
> > All three statements above are from the KSE scheduler as a result of
> > an upcall.
> 
> See my comment above.
> 
> > The same thread (main thread) is being resumed over and over again
> > which shouldn't happen for this simple program.
> 
> Can it be that the thread is deadlocked? There's no forward progress.
> There's only context switching...

I don't think so.  I think the thread stack/frame is corrupted, either
because it is copied out or resumed incorrectly.  I'll do some more
digging.

-- 
Dan Eischen



More information about the freebsd-threads mailing list