summaryrefslogtreecommitdiff
path: root/sys/kern/kern_sched.c
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-10 21:29:14 -0400
committerIan Moffett <ian@osmora.org>2025-07-10 21:29:14 -0400
commitd5316d82759bfbe146e014597605f121cb3c2e45 (patch)
treeb62a102ab593e9c746728fa90afa044181be35f0 /sys/kern/kern_sched.c
parentf284954b36f75725b09aa9fa468f6baaca34ac83 (diff)
kernel/sched: Undo sched_yield() changes
- Keep old sched_yield() logic as newer logic caused issues on QEMU - TODO: Actually fix and test Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern/kern_sched.c')
-rw-r--r--sys/kern/kern_sched.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c
index 30036c0..774ba71 100644
--- a/sys/kern/kern_sched.c
+++ b/sys/kern/kern_sched.c
@@ -258,8 +258,27 @@ sched_enter(void)
void
sched_yield(void)
{
+ struct proc *td;
+ struct cpu_info *ci = this_cpu();
+
+ if ((td = ci->curtd) == NULL) {
+ return;
+ }
+
+ td->rested = true;
+
+ /* FIXME: Hang yielding when waited on */
+ if (ISSET(td->flags, PROC_WAITED)) {
+ return;
+ }
+
+ ci->curtd = NULL;
md_inton();
sched_oneshot(false);
+
+ md_hlt();
+ md_intoff();
+ ci->curtd = td;
}
void