KSE/ia64 broken
Daniel Eischen
eischen at vigrid.com
Sat Nov 15 09:36:44 PST 2003
On Fri, 14 Nov 2003, Marcel Moolenaar wrote:
> Gang,
>
> The following change broke KSE on ia64:
>
> --------
> revision 1.18
> date: 2003/11/08 06:07:04; author: davidxu; state: Exp; lines: +16 -17
> Use THR lock instead of KSE lock to avoid scheduler be blocked in spinlock.
>
> Reviewed by: deischen
> --------
>
> We seem to be clobbering the thread structure instead of writing
> to the mailbox. This happens at initialization. Can it be that
> the change assumes PER_KSE and doesxn't work for PER_THREAD?
I _think_ this may be because rltd-elf (at least for ia64) calls
malloc with the rtld lock held. I'm not sure how to test this
theory.
The rtld lock uses a KSE lock because it is not always called
within the context of a thread. We try to be careful in libpthread
to only call malloc()/free() either at initialization (when there
are no threads) or within the context of a thread. This allows
us to make the malloc lock (currently a spinlock) a thread-based
lock. KSE locks have the disadvantage of blocking the KSE
from running any other threads. So moving spinlocks to thread
locks improves performance.
--
Dan Eischen
More information about the freebsd-threads
mailing list