MCS Preemption-Detection and Recovery locks
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 12 Oct 2011 01:06:54 +0000 (18:06 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:08 +0000 (17:36 -0700)
commitbf1a334bc24a6330319239f5ce1656f4bcc8bd62
tree7a40df9e0c1e8f7faff813872721fced1747e9af
parent488edf7a64e504990ee8d6a4c40dc10bdf18db70
MCS Preemption-Detection and Recovery locks

The basic idea is that if you are spinning, make sure someone else is
online/running that is on the way to making progress/unblocking you.
Normally, this is the lockholder, but it could also be someone else on a
chain of qnodes.  You make sure they are running, they make sure the
next one up is running, etc.  Even if we have only one pcore, this
should still unjam some preempted vcores involved in MCS locking.

Any MCS lock that is grabbed in vcore context will need to use these.
This includes all cases of notif_safe that needed to be called from
uthread context (though that needs a review, in case we still need
that).

Regardless the mcs_pdr locks can handle being called from uthread
context, and odds are that anyone desiring to use an MCS lock will need
to use these (even regular old uthread code).
user/parlib/include/mcs.h
user/parlib/include/vcore.h
user/parlib/mcs.c