Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Apr 2003 22:37:22 -0700
From:      Peter Wemm <peter@wemm.org>
To:        "David Xu" <davidxu@freebsd.org>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: patch for %gs saving 
Message-ID:  <20030411053722.782152A7EA@canning.wemm.org>
In-Reply-To: <008001c2ffe8$056584f0$f001a8c0@davidw2k> 

next in thread | previous in thread | raw e-mail | index | archive | help
"David Xu" wrote:
> Here is the patch for kernel to save %gs,
> it works well on my machine.
> http://people.freebsd.org/~davidxu/i386_gs.diff
> Daniel, is this the reason in your libpthread
> patch that doesn't use getcontext syscall ?

To put some background on the issue, there is a reason why we did not
do this.  %gs is not used by the kernel, so it does not normally need to
be saved and restored on every trap into the kernel.  Setting a segment
register is Really Slow - measured in hundreds of clock cycles.

So, we normally only touch %gs when we context switch to a different process
that may have a different %gs.  Or when one of the context syscalls wants
it changed.  We cannot avoid touching %fs because we use it for kernel
private data.  But if it wasn't for that, we wouldn't be touching
%fs for regular traps/syscalls/etc either.

Bruce Evans understands this better than I do, I would suggest not making
this change without talking about it with him first.

Cheers,
-Peter
--
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030411053722.782152A7EA>