git: kernel - Fix a SMP race in the 64-bit pmap code
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Oct 1 17:01:58 PDT 2013
commit 5e78aef9c66d402e1a066898964ad1bdd0ea8fa4
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Oct 1 16:53:38 2013 -0700
kernel - Fix a SMP race in the 64-bit pmap code
* Some of the pmap code was assuming that pv_entry's would remain stable
under circumstance where they might not actually remain stable.
Specifically, when the vm_page spinlock is held while issuing a
pv_hold_try() call on the pv, the pv is not necessarily stable
and its pmap and pindex must be double-checked after a successful
lock is acquired. This case occurs in two places in the code.
* Do this check in all cases (when the pmap spinlock OR the vm_page spin
lock is used to access a pv_entry), just to be sure that we have covered
all the bases.
* This SMP race is virtually impossible to reproduce on 8-thread boxes
but appears to be easy to reproduce on monster (48-way opteron).
* As of this commit it is not 100% clear if the patch fixes the assertion
seen, but it probably fixes some things.
panic: bad *ptep 000000078592b425 sva 00007ffffffff000 pte_pv NULL
Reported-by: ftigeot
Summary of changes:
sys/platform/pc64/x86_64/pmap.c | 64 ++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 32 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/5e78aef9c66d402e1a066898964ad1bdd0ea8fa4
--
DragonFly BSD source repository
More information about the Commits
mailing list