From ee85365bbca1220f13237f9b8ef0a392a803614d Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 28 Jul 2020 14:52:31 +0300 Subject: [PATCH] Add sched_yield(2) --- arch/amd64/syscall.c | 1 + include/sys/sys_proc.h | 2 ++ sys/thread.c | 8 ++++---- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/amd64/syscall.c b/arch/amd64/syscall.c index d96b061..27f264e 100644 --- a/arch/amd64/syscall.c +++ b/arch/amd64/syscall.c @@ -73,6 +73,7 @@ void *syscall_table[256] = { // Process control [SYSCALL_NRX_SIGENTRY] = sys_sigentry, [SYSCALL_NR_EXECVE] = sys_execve, + [SYSCALL_NR_YIELD] = sys_yield, [SYSCALL_NR_GETPID] = sys_getpid, [SYSCALL_NR_CLONE] = sys_clone, [SYSCALL_NR_KILL] = sys_kill, diff --git a/include/sys/sys_proc.h b/include/sys/sys_proc.h index f3b8efe..1bbb97c 100644 --- a/include/sys/sys_proc.h +++ b/include/sys/sys_proc.h @@ -19,6 +19,8 @@ int sys_setgid(gid_t gid); int sys_sigaltstack(const struct user_stack *ss, struct user_stack *old_ss); +void sys_yield(void); + int sys_waitpid(pid_t pid, int *status, int flags); pid_t sys_getpgid(pid_t pid); int sys_setpgid(pid_t pid, pid_t pgrp); diff --git a/sys/thread.c b/sys/thread.c index 06a6d3d..088c6df 100644 --- a/sys/thread.c +++ b/sys/thread.c @@ -85,7 +85,6 @@ void proc_add_entry(struct process *proc) { proc_ensure_dir(); - kdebug("BEGIN ADD ENTRY %d\n", proc->pid); snprintf(name, sizeof(name), "%d", proc->pid); _assert(sysfs_add_dir(g_sysfs_proc_dir, name, &proc->fs_entry) == 0); @@ -95,15 +94,12 @@ void proc_add_entry(struct process *proc) { proc, sysfs_proc_parent, NULL) == 0); _assert(sysfs_add_config_endpoint(proc->fs_entry, "ioctx", SYSFS_MODE_DEFAULT, 64, proc, sysfs_proc_ioctx, NULL) == 0); - kdebug("END ADD ENTRY %d\n", proc->pid); } void proc_del_entry(struct process *proc) { _assert(proc && !(proc->flags & THREAD_KERNEL)); _assert(proc->pid > 0); - kdebug("BEGIN DEL ENTRY %d\n", proc->pid); sysfs_del_ent(proc->fs_entry); - kdebug("END DEL ENTRY %d\n", proc->pid); } void context_save_fpu(struct thread *new, struct thread *old) { @@ -754,6 +750,10 @@ __attribute__((noreturn)) void sys_exit(int status) { panic("This code shouldn't run\n"); } +void sys_yield(void) { + yield(); +} + void sys_sigreturn(void) { context_sigreturn(); }