Date: Fri, 18 Jul 2003 16:06:33 -0400 (EDT) From: Daniel Eischen <eischen@vigrid.com> To: Julian Elischer <julian@elischer.org> Cc: threads@freebsd.org Subject: Re: Rearranging kse mailbox Message-ID: <Pine.GSO.4.10.10307181556270.21549-100000@pcnet5.pcnet.com> In-Reply-To: <Pine.BSF.4.21.0307181248390.14696-100000@InterJet.elischer.org>
index | next in thread | previous in thread | raw e-mail
On Fri, 18 Jul 2003, Julian Elischer wrote:
> for TLS we need to ensure that the first few (actually, 1 but a couple
> more can't hurt) entry in the KSE mailbox is available as a pointer to
> the TLS. (on 386 at least). Marcel probablyt has more to say on the
> topic.
OK. We really want the version as the first field,
but if it can't be that way, we'll have to move it
down a tad.
This also reminds me. We need to add the per-KSE storage and
size to the KSE mailbox so the kernel can do the LDT allocation
(for i386 and amd64).
> Also, in the latest version I assume there is still a KSE mailbox for
> 1:1 threads, as it'll be needed for TLS. (is there still a pair of
> mailboxen for bound, NON-SA threads?) (even if not used..?)
Yes, there is. Both the thread and KSE mailbox are used for
bound threads.
>
>
>
> On Fri, 18 Jul 2003, Daniel Eischen wrote:
>
> > Before we switch from libkse to libpthread, let's take a look
> > at the mailboxes and see if we want to reorder them for better
> > alignment.
> >
> > I took a cut at it. I moved the context from the beginning
> > of the thread mailbox to the end since it was the largest
> > field and most likely to change (for non-i386 archs).
> >
> > struct kse_thr_mailbox {
> > struct kse_thr_mailbox *tm_next; /* Next thread in list */
> > void *tm_udata; /* For use by the UTS */
> > uint32_t tm_flags; /* Thread flags */
> > uint32_t tm_uticks;
> > uint32_t tm_sticks;
> > uint32_t tm_spare2[9];
> > siginfo_t tm_syncsig;
> > ucontext_t tm_context; /* User and machine context */
> > };
> >
> > struct kse_mailbox {
> > uint32_t km_version; /* Mailbox version */
> > uint32_t km_flags; /* KSE flags */
> > struct kse_thr_mailbox *km_curthread; /* Currently running thread */
> > struct kse_thr_mailbox *km_completed; /* Threads back from kernel */
> > sigset_t km_sigscaught; /* Caught signals */
> > kse_func_t *km_func; /* UTS function */
> > stack_t km_stack; /* UTS context */
> > void *km_udata; /* For use by the UTS */
> > struct timespec km_timeofday; /* Time of day */
> > int32_t km_quantum; /* Upcall quantum in msecs */
> > uint32_t km_spare[8];
> > };
struct kse_mailbox {
void *km_spare1[4]; /* Allocated for TLS */
uint32_t km_version; /* Mailbox version */
uint32_t km_flags; /* KSE flags */
struct kse_thr_mailbox *km_curthread; /* Currently running thread */
struct kse_thr_mailbox *km_completed; /* Threads back from kernel */
sigset_t km_sigscaught; /* Caught signals */
kse_func_t *km_func; /* UTS function */
stack_t km_stack; /* UTS context */
void *km_udata; /* For use by the UTS */
struct timespec km_timeofday; /* Time of day */
void *km_ksdaddr; /* KSE specific data address */
uint32_t km_ksdsize; /* KSE specific data size */
int32_t km_quantum; /* Upcall quantum in msecs */
uint32_t km_spare[8];
};
--
Dan Eischen
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10307181556270.21549-100000>
