summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2000-12-02 05:41:30 +0000
committerjake <jake@FreeBSD.org>2000-12-02 05:41:30 +0000
commit7cd1ca1cdc2a023b31dfaf2d4f72702783bb2df2 (patch)
tree5c35469f7c7fe96ca4465df67615f5ca91b69401 /sys/kern
parent8fe9172d6420bac1642896608d1587e714c60453 (diff)
downloadFreeBSD-src-7cd1ca1cdc2a023b31dfaf2d4f72702783bb2df2.zip
FreeBSD-src-7cd1ca1cdc2a023b31dfaf2d4f72702783bb2df2.tar.gz
Remove thr_sleep and thr_wakeup. Remove fields p_nthread and p_wakeup
from struct proc, which are now unused (p_nthread already was). Remove process flag P_KTHREADP which was untested and only set in vfs_aio.c (it should use kthread_create). Move the yield system call to kern_synch.c as kern_threads.c has been removed completely. moral support from: alfred, jhb
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_fork.c2
-rw-r--r--sys/kern/kern_synch.c25
-rw-r--r--sys/kern/kern_threads.c162
-rw-r--r--sys/kern/syscalls.master4
-rw-r--r--sys/kern/vfs_aio.c2
5 files changed, 28 insertions, 167 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index e9cf587..6caa1d2 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -276,8 +276,6 @@ fork1(p1, flags, procp)
newproc->p_leader = newproc;
}
- newproc->p_wakeup = 0;
-
newproc->p_vmspace = NULL;
/*
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);
+}
diff --git a/sys/kern/kern_threads.c b/sys/kern/kern_threads.c
deleted file mode 100644
index 3e06abc..0000000
--- a/sys/kern/kern_threads.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *
- * Portions of this code was derived from the file kern_fork.c and as such
- * is subject to the copyrights below.
- *
- * Copyright (c) 1982, 1986, 1989, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Copyright (c) 1996 Douglas Santry
- *
- * This code is subject to the beer copyright. If I chance to meet you in a
- * bar and this code helped you in some way, you owe me a beer. Only
- * in Germany will I accept domestic beer. This code may or may not work
- * and I certainly make no claims as to its fitness for *any* purpose.
- *
- * $FreeBSD$
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/ktr.h>
-#include <sys/mutex.h>
-#include <sys/proc.h>
-#include <sys/resourcevar.h>
-#include <sys/sysproto.h>
-
-/*
- * Low level support for sleep/wakeup paradigm
- * If a timeout is specified:
- * returns 0 if wakeup
- * returns EAGAIN if timed out
- * returns EINVAL if error
- *
- * If a timeout is not specified:
- *
- * returns time waiting in ticks.
- */
-int
-thr_sleep(struct proc *p, struct thr_sleep_args *uap) {
- int sleepstart;
- struct timespec ts;
- struct timeval atv;
- int error, timo;
-
- timo = 0;
- if (uap->timeout != 0) {
- /*
- * Get timespec struct
- */
- if ((error = copyin(uap->timeout, &ts, sizeof(ts))) != 0) {
- p->p_wakeup = 0;
- return error;
- }
- if (ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000) {
- p->p_wakeup = 0;
- return (EINVAL);
- }
- TIMESPEC_TO_TIMEVAL(&atv, &ts);
- if (itimerfix(&atv)) {
- p->p_wakeup = 0;
- return (EINVAL);
- }
- timo = tvtohz(&atv);
- }
-
- p->p_retval[0] = 0;
- if (p->p_wakeup == 0) {
- sleepstart = ticks;
- p->p_flag |= P_SINTR;
- error = tsleep(p, PRIBIO, "thrslp", timo);
- p->p_flag &= ~P_SINTR;
- if (error == EWOULDBLOCK) {
- p->p_wakeup = 0;
- p->p_retval[0] = EAGAIN;
- return 0;
- }
- if (uap->timeout == 0)
- p->p_retval[0] = ticks - sleepstart;
- }
- p->p_wakeup = 0;
- return (0);
-}
-
-int
-thr_wakeup(struct proc *p, struct thr_wakeup_args *uap) {
- struct proc *pSlave = p->p_leader;
-
- while(pSlave && (pSlave->p_pid != uap->pid))
- pSlave = pSlave->p_peers;
-
- if(pSlave == 0) {
- p->p_retval[0] = ESRCH;
- return(0);
- }
-
- pSlave->p_wakeup++;
- if((pSlave->p_stat == SSLEEP) && (pSlave->p_wchan == pSlave)) {
- wakeup(pSlave);
- return(0);
- }
-
- p->p_retval[0] = EAGAIN;
- return 0;
-}
-
-/*
- * 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);
-}
-
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index 9a33b8a..2c54df2 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -461,8 +461,8 @@
319 STD BSD { int aio_write(struct aiocb *aiocbp); }
320 STD BSD { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
321 STD BSD { int yield(void); }
-322 STD BSD { int thr_sleep(const struct timespec *timeout); }
-323 STD BSD { int thr_wakeup(pid_t pid); }
+322 OBSOL NOHIDE thr_sleep
+323 OBSOL NOHIDE thr_wakeup
324 STD BSD { int mlockall(int how); }
325 STD BSD { int munlockall(void); }
326 STD BSD { int __getcwd(u_char *buf, u_int buflen); }
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 8758ebd..65f4fbf 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -691,7 +691,7 @@ aio_daemon(void *uproc)
enterpgrp(mycp, mycp->p_pid, 1);
/* Mark special process type. */
- mycp->p_flag |= P_SYSTEM | P_KTHREADP;
+ mycp->p_flag |= P_SYSTEM;
/*
* Wakeup parent process. (Parent sleeps to keep from blasting away
OpenPOWER on IntegriCloud