]> CyberLeo.Net >> Repos - FreeBSD/stable/8.git/commit
MFC 222032:
authorjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 10 Jun 2011 18:55:58 +0000 (18:55 +0000)
committerjhb <jhb@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 10 Jun 2011 18:55:58 +0000 (18:55 +0000)
commitf417e555812ac1f71419b88ea7f760256d703431
tree055121d73e9586fae250e5a1e5c256d0c73fb4ca
parentb1d3279583bd56fc270ffa33c307461d1406e05e
MFC 222032:
Fix a race in the SMP rendezvous code.  Specifically, the write by the
last CPU to to finish the rendezvous action may become visible to
different CPUs at different times.  As a result, the CPU that initiated
the rendezvous may exit the rendezvous and drop the lock allowing another
rendezvous to be initiated on the same CPU or a different CPU.  In that
case the exit sentinel may be cleared before all CPUs have noticed causing
those CPUs to hang forever.

Workaround this by using a generation count to notice when this race
occurs and to exit the rendezvous in that case.

git-svn-id: svn://svn.freebsd.org/base/stable/8@222938 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/kern/subr_smp.c