Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Jul 2003 07:11:04 +0800
From:      "David Xu" <davidxu@freebsd.org>
To:        "Julian Elischer" <julian@elischer.org>
Cc:        marcel@xcllnt.net
Subject:   Re: KSD/TSD take 2 (was: KSE critical regions)
Message-ID:  <005701c35238$dc713a00$0701a8c0@tiger>
References:  <Pine.BSF.4.21.0307241514510.69488-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help

----- Original Message -----=20
From: "Julian Elischer" <julian@elischer.org>
To: "David Xu" <davidxu@freebsd.org>
Cc: <deischen@freebsd.org>; <threads@freebsd.org>; <marcel@xcllnt.net>
Sent: Friday, July 25, 2003 6:34 AM
Subject: Re: KSD/TSD take 2 (was: KSE critical regions)


>=20
>=20
> On Fri, 25 Jul 2003, David Xu wrote:
>=20
> >=20
> > ----- Original Message -----=20
> > From: "Julian Elischer" <julian@elischer.org>
> > To: <deischen@freebsd.org>
> > Cc: <threads@freebsd.org>; "David Xu" <davidxu@freebsd.org>; =
<marcel@xcllnt.net>
> > Sent: Friday, July 25, 2003 4:59 AM
> > Subject: Re: KSD/TSD take 2 (was: KSE critical regions)
> >  to the kernel.
> > >=20
> > > In the i386 case, (and only the i386 case (unless the amd-64 case =
is the
> > > same)) the KSE MAILBOX is what we are pointing %gs:0 at, and in =
that
> > > case, the pointer to the TCB (not the thread mailbox) is stored =
there.
> > > (and set there by the UTS when scheduling a thread).
> > >=20
> > > Thus the struct kse_mailbox would have:
> > >=20
> > > struct kse_mailbox {=20
> > > #ifdef __i386__
> > >        void                    *TLS_tcb;       /* current TCB for =
TLS  */
> > > #endif
> > >        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 */
> > >        [...]
> > >=20
> >=20
> > userland can always adapt the layout by:
> >=20
> >     struct lib_kse_mailbox {
> >         void *TLS_tcb;
> >         struct kse_mailbox kmbx;
> >     };
> >=20
> > and set base address to lib_kse_mailbox, userland can
> > do whatever it wants to do. same thing can be done for
> > thread mailbox.
> >=20
> > I don't think too many fields not related to interaction
> > between kernel and userland should be pushed into mailbox,
> > it is too ugly.
>=20
> I was hoping to optimise by making the kse_create(mboxaddr)
> call allocate the LDT entry and set the gs register to point to the=20
> mailbox. making the two things differnt makes it less likely that
> making that optimisation makes sense.
>=20

Dan has two fields in kse_mailbox:

void      *km_ksdaddr;    /* KSE specific data address */
uint32_t  km_ksdsize;     /* KSE specific data size */

I think it is used to tell kernel to map start address=20
of libkse's kse mailbox like above lib_kse_mailbox.

> presently it requires special code to do the segments..
> (in teh library)
>=20
>=20
Did you make some progresses in this area ?




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?005701c35238$dc713a00$0701a8c0>