Finally protect VP lookups to guarantee that a pted won't be freed or
authormpi <mpi@openbsd.org>
Fri, 5 Jun 2015 10:15:54 +0000 (10:15 +0000)
committermpi <mpi@openbsd.org>
Fri, 5 Jun 2015 10:15:54 +0000 (10:15 +0000)
commit53ea7ac46be04d6ac7323d4048dc7aa1b4a28828
tree4910e477234fa01576f86ea956fe8c543f5a6b04
parentb7028d78371a4bb005aae115ca15f6a9e7599f3f
Finally protect VP lookups to guarantee that a pted won't be freed or
reused by a CPU while another CPU is manipulating it.

This races occurs because the virtual spill handlers are run without
taking the KERNEL_LOCK for obvious reasons.  So use a per-pmap mutex
that CPUs must hold when modifying a pted in order to guarantee the
atomicity of operations *and* the coherence between pmap VPs tree and
what's in the HASH.

Thanks to dlg@ for assisting me debugging this.  This change ends your
PowerPC pmap SMP show of the week.  GENERIC.MP on macppc should now be
stable enough to build ports without corrupting its own memory.

ok kettenis@, deraadt@, dlg@
sys/arch/powerpc/powerpc/pmap.c