diff options
author | Ian Moffett <ian@osmora.org> | 2025-07-10 21:29:14 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-07-10 21:29:14 -0400 |
commit | d5316d82759bfbe146e014597605f121cb3c2e45 (patch) | |
tree | b62a102ab593e9c746728fa90afa044181be35f0 /sys/kern/kern_sched.c | |
parent | f284954b36f75725b09aa9fa468f6baaca34ac83 (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.c | 19 |
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 |