aboutsummaryrefslogtreecommitdiff
path: root/src/uapi/proc.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-02 21:40:10 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-02 21:40:10 +0300
commit8a3452098267e1af127d6c4f1836a9d82cd23f38 (patch)
treec9fad842a8903f64a57027b66ef54bba0dee2928 /src/uapi/proc.c
parent7ad9c01dad7b1b46eced8290b8b991383d648188 (diff)
downloadkmi-8a3452098267e1af127d6c4f1836a9d82cd23f38.tar.gz
kmi-8a3452098267e1af127d6c4f1836a9d82cd23f38.zip
more complete interrupt handling outline
+ Still largely untested, should really try to come up with a proper testsuite, at the moment it's mostly me trying things out in the (as of yet unreleased) kmx repo
Diffstat (limited to 'src/uapi/proc.c')
-rw-r--r--src/uapi/proc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/uapi/proc.c b/src/uapi/proc.c
index 153b183..e87a2ec 100644
--- a/src/uapi/proc.c
+++ b/src/uapi/proc.c
@@ -10,6 +10,7 @@
#include <kmi/uapi.h>
#include <kmi/proc.h>
#include <kmi/bits.h>
+#include <kmi/notify.h>
#include <kmi/mem_regions.h>
/**
@@ -186,6 +187,14 @@ SYSCALL_DEFINE1(swap)(struct tcb *t, sys_arg_t tid){
/* set return value for current thread */
set_args1(t, OK);
+ /* not running anymore lol */
+ if (t->notify_state == NOTIFY_RUNNING)
+ t->notify_state = NOTIFY_WAITING;
+
+ /* handle possible queued notification */
+ if (s->notify_state == NOTIFY_QUEUED)
+ notify(s, 0);
+
/* get register state for new thread */
return_args(s, get_args(s));
}