From 888c099072d368b2b69e6a756dd5f596d7a5bfa8 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Tue, 23 Dec 2025 11:45:55 -0800 Subject: [PATCH] implement sys_sched_yield --- etc/syscalls_linux_aarch64.md | 4 ++-- src/arch/arm64/exceptions/syscall.rs | 3 ++- src/sched/mod.rs | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/etc/syscalls_linux_aarch64.md b/etc/syscalls_linux_aarch64.md index 9a56cd6..c3e1efe 100644 --- a/etc/syscalls_linux_aarch64.md +++ b/etc/syscalls_linux_aarch64.md @@ -50,7 +50,7 @@ | 0x2f (47) | fallocate | (int fd, int mode, loff_t offset, loff_t len) | __arm64_sys_fallocate | false | | 0x30 (48) | faccessat | (int dfd, const char *filename, int mode) | __arm64_sys_faccessat | true | | 0x31 (49) | chdir | (const char *filename) | __arm64_sys_chdir | true | -| 0x32 (50) | fchdir | (unsigned int fd) | __arm64_sys_fchdir | true | +| 0x32 (50) | fchdir | (unsigned int fd) | __arm64_sys_fchdir | true | | 0x33 (51) | chroot | (const char *filename) | __arm64_sys_chroot | true | | 0x34 (52) | fchmod | (unsigned int fd, umode_t mode) | __arm64_sys_fchmod | false | | 0x35 (53) | fchmodat | (int dfd, const char *filename, umode_t mode) | __arm64_sys_fchmodat | false | @@ -124,7 +124,7 @@ | 0x79 (121) | sched_getparam | (pid_t pid, struct sched_param *param) | __arm64_sys_sched_getparam | false | | 0x7a (122) | sched_setaffinity | (pid_t pid, unsigned int len, unsigned long *user_mask_ptr) | __arm64_sys_sched_setaffinity | false | | 0x7b (123) | sched_getaffinity | (pid_t pid, unsigned int len, unsigned long *user_mask_ptr) | __arm64_sys_sched_getaffinity | false | -| 0x7c (124) | sched_yield | () | __arm64_sys_sched_yield | false | +| 0x7c (124) | sched_yield | () | __arm64_sys_sched_yield | true | | 0x7d (125) | sched_get_priority_max | (int policy) | __arm64_sys_sched_get_priority_max | false | | 0x7e (126) | sched_get_priority_min | (int policy) | __arm64_sys_sched_get_priority_min | false | | 0x7f (127) | sched_rr_get_interval | (pid_t pid, struct __kernel_timespec *interval) | __arm64_sys_sched_rr_get_interval | false | diff --git a/src/arch/arm64/exceptions/syscall.rs b/src/arch/arm64/exceptions/syscall.rs index ca4c042..a784e18 100644 --- a/src/arch/arm64/exceptions/syscall.rs +++ b/src/arch/arm64/exceptions/syscall.rs @@ -59,7 +59,7 @@ use crate::{ }, threading::{futex::sys_futex, sys_set_robust_list, sys_set_tid_address}, }, - sched::current_task, + sched::{current_task, sys_sched_yield}, }; use alloc::boxed::Box; use libkernel::{ @@ -182,6 +182,7 @@ pub async fn handle_syscall() { 0x63 => sys_set_robust_list(TUA::from_value(arg1 as _), arg2 as _).await, 0x65 => sys_nanosleep(TUA::from_value(arg1 as _), TUA::from_value(arg2 as _)).await, 0x71 => sys_clock_gettime(arg1 as _, TUA::from_value(arg2 as _)).await, + 0x7c => sys_sched_yield(), 0x81 => sys_kill(arg1 as _, arg2.into()), 0x82 => sys_tkill(arg1 as _, arg2.into()), 0x84 => sys_sigaltstack(TUA::from_value(arg1 as _), TUA::from_value(arg2 as _)).await, diff --git a/src/sched/mod.rs b/src/sched/mod.rs index 2f6ddb4..e56a281 100644 --- a/src/sched/mod.rs +++ b/src/sched/mod.rs @@ -224,3 +224,8 @@ fn get_idle_task() -> Arc { .get_or_init(|| Arc::new(ArchImpl::create_idle_task())) .clone() } + +pub fn sys_sched_yield() -> Result { + schedule(); + Ok(0) +}