kern_threads.c.. upcall question..
Julian Elischer
julian at elischer.org
Mon May 5 17:39:58 PDT 2003
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
>
>
More information about the freebsd-threads
mailing list