svn commit: r223485 - in head/sys/powerpc: aim booke include
ofw powerpc
Marcel Moolenaar
marcel at xcllnt.net
Fri Jun 24 16:11:22 UTC 2011
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
>
> 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?
--
Marcel Moolenaar
marcel at xcllnt.net
More information about the svn-src-all
mailing list