rendez: Make sure we can block before sleeping
A lot of rendezvouses don't block, but any of them could. By checking in
advance, instead of deep in sem_down(), we'll catch those cases where we
could have blocked but rarely do.
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/src/rendez.c b/kern/src/rendez.c
index 576eaf6..857821c 100644
--- a/kern/src/rendez.c
+++ b/kern/src/rendez.c
@@ -22,6 +22,8 @@
{
int8_t irq_state = 0;
struct cv_lookup_elm cle;
+
+ assert(can_block(this_pcpui_ptr()));
/* Do a quick check before registering and sleeping. this is the 'check,
* signal, check again' pattern, where the first check is an optimization.
* Many rendezes will already be satisfied, so we want to avoid excessive
@@ -69,6 +71,7 @@
struct cv_lookup_elm cle;
struct timer_chain *pcpui_tchain = &per_cpu_info[core_id()].tchain;
+ assert(can_block(this_pcpui_ptr()));
if (!usec)
return;
/* Doing this cond check early, but then unlocking again. Mostly just to