Date: Fri, 24 Jun 2011 09:11:09 -0700 From: Marcel Moolenaar <marcel@xcllnt.net> To: Nathan Whitehorn <nwhitehorn@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r223485 - in head/sys/powerpc: aim booke include ofw powerpc Message-ID: <1B2D07F9-3716-4581-8426-11BE78CE1D1F@xcllnt.net> In-Reply-To: <201106232221.p5NMLSFj019042@svn.freebsd.org> References: <201106232221.p5NMLSFj019042@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Jun 23, 2011, at 3:21 PM, Nathan Whitehorn wrote: > Author: nwhitehorn > Date: Thu Jun 23 22:21:28 2011 > New Revision: 223485 > URL: http://svn.freebsd.org/changeset/base/223485 >=20 > Log: > Use the ABI-mandated thread pointer register (r2 for ppc32, r13 for = ppc64) > instead of a PCPU field for curthread. This averts a race on SMP = systems > with a high interrupt rate where the thread looking up the value of > curthread could be preempted and migrated between obtaining the PCPU > pointer and reading the value of pc_curthread, resulting in curthread = being > observed to be the current thread on the thread's original CPU. This = played > merry havoc with the system, in particular with mutexes. Many thanks = to > jhb for helping me work this one out. Nice catch! Another approach would be to have r2/r13 hold the address of the PCPU structure and simply do a load from that address to get curthread. The difference between the approaches is the need to to a memory load or not for curthread. But with r2/r13 pointing to the PCPU, you may be faster to get other PCPU fields if reading from the a SPR adds to the overhead. Plus, it's easier to be atomic if you don't have to read the SPR first and then do a load. Is curthread the only field that needs to be atomically accessed or are other fields in the PCPU susceptible to race conditions? --=20 Marcel Moolenaar marcel@xcllnt.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1B2D07F9-3716-4581-8426-11BE78CE1D1F>