Clarifies/fixes some issues with __preempt and MCS
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 24 Oct 2011 18:00:08 +0000 (11:00 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 Dec 2011 22:48:40 +0000 (14:48 -0800)
commit9f0b2d60ae54162689f0d6a7e0875e0d72c73045
tree9abaf8aed0e06ea6519a7090eab5584680ff035c
parenta72feebddf7aa52df2392eb9471254f08a464361
Clarifies/fixes some issues with __preempt and MCS

We need the wmb() in __preempt, which is racing with __map_vcore()
(among other things).  Basically, we need to make sure we don't give out
the vcore while cleaning up the vcore.  Once we __unmap_vcore(), we need
to never touch it again til it is mapped.

Likewise, the MCS-PDR code can quite easily see a situation where a core
is preempted but is still mapped.  The old assertion was mostly to catch
bugs, but that wasn't a "safe" check, since the preempting and unmapping
isn't atomic from the perspective of other cores.
kern/src/process.c
user/parlib/mcs.c