Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 May 2003 17:39:55 -0700 (PDT)
From:      Julian Elischer <julian@elischer.org>
To:        Daniel Eischen <eischen@pcnet1.pcnet.com>
Cc:        threads@freebsd.org
Subject:   Re: kern_threads.c..  upcall question..
Message-ID:  <Pine.BSF.4.21.0305051713510.27399-100000@InterJet.elischer.org>
In-Reply-To: <Pine.GSO.4.10.10305051955540.19522-100000@pcnet1.pcnet.com>

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


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)

*) 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..


> 
> -- 
> Dan Eischen
> 
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0305051713510.27399-100000>