From owner-freebsd-threads@FreeBSD.ORG Mon May 5 17:49:57 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 5571537B401 for ; Mon, 5 May 2003 17:49:57 -0700 (PDT) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8997343FA3 for ; Mon, 5 May 2003 17:49:56 -0700 (PDT) (envelope-from eischen@pcnet1.pcnet.com) Received: from pcnet1.pcnet.com (localhost [127.0.0.1]) by mail.pcnet.com (8.12.8/8.12.1) with ESMTP id h460noBg027811; Mon, 5 May 2003 20:49:50 -0400 (EDT) Received: from localhost (eischen@localhost)h460nolq027808; Mon, 5 May 2003 20:49:50 -0400 (EDT) Date: Mon, 5 May 2003 20:49:50 -0400 (EDT) From: Daniel Eischen To: Julian Elischer In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: threads@freebsd.org Subject: Re: kern_threads.c.. upcall question.. 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: Tue, 06 May 2003 00:49:57 -0000 On Mon, 5 May 2003, Julian Elischer wrote: > On Mon, 5 May 2003, Daniel Eischen wrote: > > > On Mon, 5 May 2003, Julian Elischer wrote: > > > > > > > > In kern_threads.c, in function thread_export_context() > > > it first does a copyin() of the > > > context storage area. I think this is un-needed (and a complete waste of > > > cycles) but I am not sure if there is some strange condition > > > regarding floating point registers or something that may want this.. > > > > > > Dan, Jon, David? > > > do any of you have a good reason why I shouldn't remove the copyin().?? > > > > Yeah, the threads library keeps the thread's active signal > > mask in the context area. The stack and flags may also > > be used in the context. > > > > You should be able to safely copy out the mcontext without > > a copyin(). Is that what you're currently doing? Or is > > the entire context (ucontext) being exported? > > it does: > > *) copyin the ucontext_t > > *) load context into it using thread_getcontext() which uses > get_mcontext() and adds the kernel thread sigmask (this must have > been added by jeff in some way) (note it doesn't OR, just writes) Eek. That could cause problems for libpthread. We don't want the kernel thread signal mask being copied to the exported context. > *) copyout of the ucontext_t > > The ucontext is: > > sigset_t uc_sigmask; <-- gets over-written (!) > mcontext_t uc_mcontext; <-- gets over-written > struct __ucontext *uc_link; <-- one in userland MAY be > valuable > stack_t uc_stack; <-- probably worth saving.. > int uc_flags; <-- probably worth saving > int __spare__[4]; > > > > > It seems to me that just copying out the sigset_t and mcontext_t > may be all that is needed. (and I'm not so sure about the sigset_t > at that.. Yes, please don't copyout the sigset. -- Dan Eischen