From owner-p4-projects@FreeBSD.ORG Tue Apr 26 13:36:11 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6251B16A4D0; Tue, 26 Apr 2005 13:36:11 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DB7B316A4CE; Tue, 26 Apr 2005 13:36:10 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C1A5643D4C; Tue, 26 Apr 2005 13:36:10 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from [127.0.0.1] (davidxu@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j3QDa7LT087379; Tue, 26 Apr 2005 13:36:09 GMT (envelope-from davidxu@freebsd.org) Message-ID: <426E43C5.20401@freebsd.org> Date: Tue, 26 Apr 2005 21:36:05 +0800 From: David Xu User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.5) Gecko/20050306 X-Accept-Language: en-us, en MIME-Version: 1.0 To: John Baldwin References: <200504171042.j3HAgeTQ054345@repoman.freebsd.org> <87f1dd37c46f5e61c68035b9989ae5b7@FreeBSD.org> In-Reply-To: <87f1dd37c46f5e61c68035b9989ae5b7@FreeBSD.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit cc: Perforce Change Reviews Subject: Re: PERFORCE change 75366 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Apr 2005 13:36:11 -0000 John Baldwin wrote: > > On Apr 17, 2005, at 6:42 AM, David Xu wrote: > >> http://perforce.freebsd.org/chv.cgi?CH=75366 >> >> Change 75366 by davidxu@davidxu_alona on 2005/04/17 10:42:05 >> >> Implement cpu_set_user_tls for sparc64. >> >> Affected files ... >> >> .. >> //depot/projects/davidxu_thread/src/sys/sparc64/sparc64/vm_machdep.c#6 >> edit >> >> Differences ... >> >> ==== >> //depot/projects/davidxu_thread/src/sys/sparc64/sparc64/vm_machdep.c#6 >> (text+ko) ==== >> >> @@ -194,6 +194,15 @@ >> td->td_retval[1] = tf->tf_out[1]; >> } >> >> +void >> +cpu_set_user_tls(struct thread *td, void *tls_base, size_t tls_size, >> + int tls_seg __unused) >> +{ >> + if (td == curthread) >> + flushw(); >> + td->td_frame->tf_global[7] = tls_base; >> +} >> + > > > I think for at least this one and Alpha you might want a critical > section in the curthread case like you do on i386 and amd64 since > calling the Alpha PAL and setting tls_base + flushw() are more than > one instruction long. > If this is true, why don't set_mcontext on sparc64 and alpha enter critical region ? I enter critical region on i386 and amd64, because I have to write global register (amd64 MSR) or gdt on i386, if thread is preempted, then it may be in intermediate state, for example on amd64: td->td_pcb->pcb_fsbase = (register_t)tls_base; ---> wrmsr(MSR_FSBASE, td->td_pcb->pcb_fsbase); if thread is preempted at ---->, a rdmsr in cpu_switch() will overwrite the value I set before I can write it into MSR_FSBASE register. David Xu