alarm: Add a alarm_expired()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 13 Nov 2018 02:18:57 +0000 (21:18 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 14 Dec 2018 22:23:48 +0000 (17:23 -0500)
commit5ec59521aca5a4d98afb08c1be8a7283f5e5cd9b
tree79d1aea559d4335971f2256b1bd7c2ee00dc1f55
parent713c62c82b6822feecac2cb02337b25c5349d0ac
alarm: Add a alarm_expired()

The rendez code was looking at on_tchain to determine if it had expired
or not.  It is possible for the alarm to have expired even though the
handler hasn't run yet.  If an alarm runs as an RKM, its time might
have come, but it is still on the tchain.  In these cases, we want to
timeout the rendez instead of waiting for the alarm service.

Note that this is safe in regards to the alarm's memory.  I was briefly
worried that we're breaking out of the rendez loop before the alarm
handler runs.  But we do that all the time, such as when a condition
fires, and we handle it by calling unset_alarm().

I noticed this when trying to debug a potential livelock.  We might be
able to go back to on_tchain or something else if that read_tsc() is a
problem.  In that case, we'll just change the helper.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/alarm.h
kern/src/rendez.c