aboutsummaryrefslogtreecommitdiff
path: root/src/timer.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-05 21:02:52 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-05 21:02:52 +0300
commit608f44306a6f0d5692f5c81bcbfe7a621ec254ba (patch)
tree72a9f917694be91e4795bd04fddabac8139e1059 /src/timer.c
parentbef6a76b602eee8f43c2e7dd65c5bd9cf5d909e4 (diff)
downloadkmi-608f44306a6f0d5692f5c81bcbfe7a621ec254ba.tar.gz
kmi-608f44306a6f0d5692f5c81bcbfe7a621ec254ba.zip
implement bkl
+ Start out using big kernel lock, apparently seL4 thinks its good enough. I might have a go at using a more fair lock, and possibly moving to more fine-grained locks if I really feel the need to get scalability up.
Diffstat (limited to 'src/timer.c')
-rw-r--r--src/timer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/timer.c b/src/timer.c
index 2607584..2d4ff01 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -21,6 +21,7 @@
#include <kmi/notify.h>
#include <kmi/nodes.h>
#include <kmi/utils.h>
+#include <kmi/bkl.h>
#include <kmi/timer.h>
#include <kmi/debug.h>
#include <arch/cpu.h>
@@ -197,12 +198,16 @@ ticks_t nsecs_to_ticks(tunit_t nsecs)
/* call to this function from exception handlers */
void handle_timer()
{
+ bkl_lock();
struct timer *t = newest_timer();
remove_timer(t);
struct tcb *r = get_tcb(t->tid);
- if (!r)
+ if (!r) {
+ bkl_unlock();
return;
+ }
notify(r, NOTIFY_TIMER);
+ bkl_unlock();
}