Date: Mon, 15 Aug 2016 11:16:44 +0000 (UTC) From: Ed Schouten <ed@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r304148 - stable/11/sys/arm64/arm64 Message-ID: <201608151116.u7FBGiqY011276@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ed Date: Mon Aug 15 11:16:43 2016 New Revision: 304148 URL: https://svnweb.freebsd.org/changeset/base/304148 Log: MFC r303923: Make cpu_set_user_tls() work when called on the running thread. On all the other architectures, this function can also be called on the currently running thread. In this case, we shouldn't fix up the address in the PCB, but also patch up the register itself. Otherwise it will not become active and will simply become overwritten by the next switch. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D7437 Modified: stable/11/sys/arm64/arm64/vm_machdep.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/arm64/arm64/vm_machdep.c ============================================================================== --- stable/11/sys/arm64/arm64/vm_machdep.c Mon Aug 15 10:46:33 2016 (r304147) +++ stable/11/sys/arm64/arm64/vm_machdep.c Mon Aug 15 11:16:43 2016 (r304148) @@ -201,6 +201,8 @@ cpu_set_user_tls(struct thread *td, void pcb = td->td_pcb; pcb->pcb_tpidr_el0 = (register_t)tls_base; + if (td == curthread) + WRITE_SPECIALREG(tpidr_el0, tls_base); return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608151116.u7FBGiqY011276>