From owner-freebsd-threads@FreeBSD.ORG Thu Jul 24 15:34:46 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 744A437B401; Thu, 24 Jul 2003 15:34:46 -0700 (PDT) Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [204.127.198.35]) by mx1.FreeBSD.org (Postfix) with ESMTP id E10E843FBD; Thu, 24 Jul 2003 15:34:45 -0700 (PDT) (envelope-from julian@elischer.org) Received: from interjet.elischer.org ([12.233.125.100]) by attbi.com (rwcrmhc11) with ESMTP id <2003072422344401300na1v1e>; Thu, 24 Jul 2003 22:34:44 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id PAA70866; Thu, 24 Jul 2003 15:34:41 -0700 (PDT) Date: Thu, 24 Jul 2003 15:34:40 -0700 (PDT) From: Julian Elischer To: David Xu In-Reply-To: <002501c35230$1205be60$0701a8c0@tiger> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: deischen@freebsd.org cc: threads@freebsd.org cc: marcel@xcllnt.net Subject: Re: KSD/TSD take 2 (was: KSE critical regions) X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jul 2003 22:34:46 -0000 On Fri, 25 Jul 2003, David Xu wrote: > > ----- Original Message ----- > From: "Julian Elischer" > To: > Cc: ; "David Xu" ; > Sent: Friday, July 25, 2003 4:59 AM > Subject: Re: KSD/TSD take 2 (was: KSE critical regions) > to the kernel. > > > > 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). > > > > Thus the struct kse_mailbox would have: > > > > struct kse_mailbox { > > #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 */ > > [...] > > > > userland can always adapt the layout by: > > struct lib_kse_mailbox { > void *TLS_tcb; > struct kse_mailbox kmbx; > }; > > and set base address to lib_kse_mailbox, userland can > do whatever it wants to do. same thing can be done for > thread mailbox. > > I don't think too many fields not related to interaction > between kernel and userland should be pushed into mailbox, > it is too ugly. 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 mailbox. making the two things differnt makes it less likely that making that optimisation makes sense. presently it requires special code to do the segments.. (in teh library) > > David Xu > > > >