diff options
Diffstat (limited to 'sys/kern/kern_synch.c')
-rw-r--r-- | sys/kern/kern_synch.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index a14abb2..7c9b50b 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -52,6 +52,7 @@ #include <sys/resourcevar.h> #include <sys/vmmeter.h> #include <sys/sysctl.h> +#include <sys/sysproto.h> #include <vm/vm.h> #include <vm/vm_extern.h> #ifdef KTRACE @@ -1076,3 +1077,27 @@ schedclock(p) p->p_priority = p->p_usrpri; } } + +/* + * General purpose yield system call + */ +int +yield(struct proc *p, struct yield_args *uap) +{ + int s; + + p->p_retval[0] = 0; + + s = splhigh(); + mtx_enter(&sched_lock, MTX_SPIN); + DROP_GIANT_NOSWITCH(); + p->p_priority = MAXPRI; + setrunqueue(p); + p->p_stats->p_ru.ru_nvcsw++; + mi_switch(); + mtx_exit(&sched_lock, MTX_SPIN); + PICKUP_GIANT(); + splx(s); + + return (0); +} |