KSE/ia64 broken

Marcel Moolenaar marcel at xcllnt.net
Sun Nov 16 11:53:44 PST 2003


On Sun, Nov 16, 2003 at 02:30:20PM -0500, Daniel Eischen wrote:
> On Sun, 16 Nov 2003, Marcel Moolenaar wrote:
> 
> > On Sun, Nov 16, 2003 at 12:18:33PM -0500, Daniel Eischen wrote:
> > > 
> > > Are you sure there's not an ia64 kernel bug or ia64 context
> > > restoring bug?
> > 
> > There's nothing pointing in that direction yet. I keep thinking
> > that the case is related to having TP per thread on ia64, while
> > it's per KSE on i386.
> 
> If you noop the spinlock/spinunlock, the problem still
> occurs.

Hmmm, good to know. It tells me that the lock is in reality
already a no-op :-)

> 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().
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)?

-- 
 Marcel Moolenaar	  USPA: A-39004		 marcel at xcllnt.net


More information about the freebsd-threads mailing list