summaryrefslogtreecommitdiff
path: root/sys/kern/kern_synch.c
diff options
context:
space:
mode:
authorJake Burkholder <jake@FreeBSD.org>2000-12-02 05:41:30 +0000
committerJake Burkholder <jake@FreeBSD.org>2000-12-02 05:41:30 +0000
commit86360fee54c8a5e15a26d969748732f127e82def (patch)
tree4902158e3b0b6f4c32260e722ceed48a40fd0012 /sys/kern/kern_synch.c
parentb852b893a3461eb15b674d32f92797189b63038f (diff)
Notes
Diffstat (limited to 'sys/kern/kern_synch.c')
-rw-r--r--sys/kern/kern_synch.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index a14abb2dccb0..7c9b50bf52f6 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);
+}