Clunky adaptive mutexes
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 9 Dec 2014 23:04:13 +0000 (15:04 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Dec 2014 06:55:08 +0000 (22:55 -0800)
commit084f682c6cd1a3a96c4c76becf395e6d88925bb5
treef819b3843b4fe269e791446672251a6c79955370
parentc4a7f74c903ffc936d150b4b2ab9c57174c9b76f
Clunky adaptive mutexes

Semaphores will spin a bit before sleeping.  The amount of time is up to you
(CONFIG).

Note that you can't always profile the time spent spinning, since we can't
enable IRQs blindly in sem_down().  Even if we still have IRQs disabled when we
trydown(), we'd still deadlock since CVs are implemented with semaphores.

On a similar note, CVs and thus rendezes are implemented under the hood with
semaphores.  It's not clear to me that spinning is the right approach here.

Additionally, Akaros is a non-preemptive kernel, in that kernel code won't be
preempted for other routine kernel code.  If a sem is upped in a routine kernel
message (RKM), then spinning will be harmful if the unblocking RKM is sent to
the spinning core.
Kconfig
kern/src/kthread.c