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