Date: Tue, 6 May 2003 00:10:24 -0700 (PDT) From: Julian Elischer <julian@elischer.org> To: David Xu <davidxu@freebsd.org> Cc: Daniel Eischen <eischen@pcnet1.pcnet.com> Subject: Re: kern_threads.c.. upcall question.. Message-ID: <Pine.BSF.4.21.0305052345410.4662-100000@InterJet.elischer.org> In-Reply-To: <04ec01c3139a$579093d0$f001a8c0@davidw2k>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 6 May 2003, David Xu wrote: > I think the following patch is enough: I agree that this seems enough from what I was reading. (I like patches that have most lines starting with '-' :-) > > Index: kern_thread.c > =================================================================== > RCS file: /home/ncvs/src/sys/kern/kern_thread.c,v > retrieving revision 1.129 > diff -u -r1.129 kern_thread.c > --- kern_thread.c 1 May 2003 12:16:06 -0000 1.129 > +++ kern_thread.c 6 May 2003 06:32:10 -0000 > @@ -721,41 +721,6 @@ [...] > void > @@ -962,27 +927,25 @@ > uintptr_t mbx; > void *addr; > int error,temp; > - ucontext_t uc; > + mcontext_t mc; > > p = td->td_proc; > kg = td->td_ksegrp; > > /* Export the user/machine context. */ > - addr = (void *)(&td->td_mailbox->tm_context); > - error = copyin(addr, &uc, sizeof(ucontext_t)); > - if (error) > - goto bad; > - > - thread_getcontext(td, &uc); > - error = copyout(&uc, addr, sizeof(ucontext_t)); > - if (error) > + get_mcontext(td, &mc, 0); I think this could be optimised even more. (why copy the FP regs if they are not valid) (etc). but it is an improvement.. > + addr = (void *)(&td->td_mailbox->tm_context.uc_mcontext); > + error = copyout(&mc, addr, sizeof(mcontext_t)); > + if (error) > goto bad; > > /* Exports clock ticks in kernel mode */ > addr = (caddr_t)(&td->td_mailbox->tm_sticks); > temp = fuword(addr) + td->td_usticks; > - if (suword(addr, temp)) > + if (suword(addr, temp)) { > + error = EFAULT; > goto bad; > + } > > /* Get address in latest mbox of list pointer */ > addr = (void *)(&td->td_mailbox->tm_next); > > > And should we disable single threading testing or do > double checking in thread_user_enter()? I think per-syscall > PROC_LOCK is too expensive for us. I am not sure which one you refer too.. Which single_threading test? BTW, I am a little unsure about the calling of thread_user_enter() from thread_userret(). > > David Xu > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0305052345410.4662-100000>