diff options
author | Ian Moffett <ian@osmora.org> | 2025-05-31 01:54:40 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-05-31 01:54:40 -0400 |
commit | 5d52c9f23a260fb297e5a1a40574dd4f590de276 (patch) | |
tree | 832e0128fa23b4e5d2e222516f43c46e7420ab39 | |
parent | 366d918f863bce207616b9bcc1bdc44b60011576 (diff) |
kernel: sched: Implement better sched_yield()
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/kern/kern_sched.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c index b66bdf8..8e456d2 100644 --- a/sys/kern/kern_sched.c +++ b/sys/kern/kern_sched.c @@ -253,12 +253,20 @@ sched_enter(void) void sched_yield(void) { - struct proc *td = this_td(); + struct proc *td; + struct cpu_info *ci = this_cpu(); - if (td != NULL) { - td->rested = true; - sched_switch(&td->tf); + if ((td = ci->curtd) == NULL) { + return; } + + td->rested = true; + ci->curtd = NULL; + + md_inton(); + sched_oneshot(false); + md_hlt(); + ci->curtd = td; } void |