diff options
author | 2010-06-29 00:28:14 +0000 | |
---|---|---|
committer | 2010-06-29 00:28:14 +0000 | |
commit | 351c20c593075aab5a3342f59ad7ce1e96b7b1ad (patch) | |
tree | 6b9506388289e1163b5f5d4dfbb65903555678a4 | |
parent | Clean up iterface stats handling: (diff) | |
download | wireguard-openbsd-351c20c593075aab5a3342f59ad7ce1e96b7b1ad.tar.xz wireguard-openbsd-351c20c593075aab5a3342f59ad7ce1e96b7b1ad.zip |
Eliminate RTHREADS kernel option in favor of a sysctl. The actual status
(not done) hasn't changed, but now it's less work to test things.
ok art deraadt
-rw-r--r-- | sys/kern/exec_elf.c | 6 | ||||
-rw-r--r-- | sys/kern/kern_exit.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_fork.c | 22 | ||||
-rw-r--r-- | sys/kern/kern_prot.c | 6 | ||||
-rw-r--r-- | sys/kern/kern_sig.c | 27 | ||||
-rw-r--r-- | sys/kern/kern_synch.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_sysctl.c | 7 | ||||
-rw-r--r-- | sys/kern/syscalls.master | 10 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 6 | ||||
-rw-r--r-- | sys/sys/systm.h | 4 |
10 files changed, 38 insertions, 68 deletions
diff --git a/sys/kern/exec_elf.c b/sys/kern/exec_elf.c index 882bbd12f4b..7c827e07d60 100644 --- a/sys/kern/exec_elf.c +++ b/sys/kern/exec_elf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exec_elf.c,v 1.73 2010/05/02 11:15:29 kettenis Exp $ */ +/* $OpenBSD: exec_elf.c,v 1.74 2010/06/29 00:28:14 tedu Exp $ */ /* * Copyright (c) 1996 Per Fogelstrom @@ -1137,9 +1137,7 @@ ELFNAMEEND(coredump_notes)(struct proc *p, void *iocookie, size_t *sizep) struct uio uio; struct elfcore_procinfo cpi; Elf_Note nhdr; -#ifdef RTHREADS struct proc *q; -#endif size_t size, notesize; int error; @@ -1260,7 +1258,6 @@ ELFNAMEEND(coredump_notes)(struct proc *p, void *iocookie, size_t *sizep) return (error); size += notesize; -#ifdef RTHREADS /* * Now, for each thread, write the register info and any other * per-thread notes. Since we're dumping core, we don't bother @@ -1274,7 +1271,6 @@ ELFNAMEEND(coredump_notes)(struct proc *p, void *iocookie, size_t *sizep) return (error); size += notesize; } -#endif *sizep = size; #endif diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 19e4d30d70f..7cd416720b4 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_exit.c,v 1.92 2010/05/26 15:16:57 oga Exp $ */ +/* $OpenBSD: kern_exit.c,v 1.93 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_exit.c,v 1.39 1996/04/22 01:38:25 christos Exp $ */ /* @@ -90,7 +90,6 @@ sys_exit(struct proc *p, void *v, register_t *retval) return (0); } -#ifdef RTHREADS int sys_threxit(struct proc *p, void *v, register_t *retval) { @@ -98,6 +97,9 @@ sys_threxit(struct proc *p, void *v, register_t *retval) syscallarg(pid_t *) notdead; } */ *uap = v; + if (!rthreads_enabled) + return (EINVAL); + if (SCARG(uap, notdead) != NULL) { pid_t zero = 0; if (copyout(&zero, SCARG(uap, notdead), sizeof(zero))) { @@ -108,7 +110,6 @@ sys_threxit(struct proc *p, void *v, register_t *retval) return (0); } -#endif /* * Exit: deallocate address space and other resources, change proc state @@ -126,7 +127,6 @@ exit1(struct proc *p, int rv, int flags) /* unlink ourselves from the active threads */ TAILQ_REMOVE(&p->p_p->ps_threads, p, p_thr_link); -#ifdef RTHREADS if (TAILQ_EMPTY(&p->p_p->ps_threads)) wakeup(&p->p_p->ps_threads); /* @@ -159,7 +159,6 @@ exit1(struct proc *p, int rv, int flags) while (!TAILQ_EMPTY(&p->p_p->ps_threads)) tsleep(&p->p_p->ps_threads, PUSER, "thrdeath", 0); } -#endif if (p->p_flag & P_PROFIL) stopprofclock(p); diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 6721ea107d0..f24d5509cf9 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_fork.c,v 1.112 2010/06/27 03:26:39 guenther Exp $ */ +/* $OpenBSD: kern_fork.c,v 1.113 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */ /* @@ -192,13 +192,11 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, /* sanity check some flag combinations */ if (flags & FORK_THREAD) { -#ifdef RTHREADS + if (!rthreads_enabled) + return (ENOTSUP); if ((flags & (FORK_SIGHAND | FORK_NOZOMBIE)) != (FORK_SIGHAND | FORK_NOZOMBIE)) return (EINVAL); -#else - return (ENOTSUP); -#endif } if (flags & FORK_SIGHAND && (flags & FORK_SHAREVM) == 0) return (EINVAL); @@ -248,7 +246,6 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, p2->p_exitsig = exitsig; p2->p_flag = 0; -#ifdef RTHREADS if (flags & FORK_THREAD) { atomic_setbits_int(&p2->p_flag, P_THREAD); p2->p_p = p1->p_p; @@ -257,9 +254,6 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, } else { process_new(p2, p1); } -#else - process_new(p2, p1); -#endif /* * Make a proc table entry for the new process. @@ -287,12 +281,9 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, atomic_setbits_int(&p2->p_flag, p1->p_flag & (P_SUGID | P_SUGIDEXEC)); if (flags & FORK_PTRACE) atomic_setbits_int(&p2->p_flag, p1->p_flag & P_TRACED); -#ifdef RTHREADS if (flags & FORK_THREAD) { /* nothing */ - } else -#endif - { + } else { p2->p_p->ps_cred = pool_get(&pcred_pool, PR_WAITOK); bcopy(p1->p_p->ps_cred, p2->p_p->ps_cred, sizeof(*p2->p_p->ps_cred)); p2->p_p->ps_cred->p_refcnt = 1; @@ -317,12 +308,9 @@ fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, * (If PL_SHAREMOD is clear, the structure is shared * copy-on-write.) */ -#ifdef RTHREADS if (flags & FORK_THREAD) { /* nothing */ - } else -#endif - { + } else { if (p1->p_p->ps_limit->p_lflags & PL_SHAREMOD) p2->p_p->ps_limit = limcopy(p1->p_p->ps_limit); else { diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index 4bc25db975b..d15cf2d0447 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_prot.c,v 1.42 2010/06/28 23:00:30 guenther Exp $ */ +/* $OpenBSD: kern_prot.c,v 1.43 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_prot.c,v 1.33 1996/02/09 18:59:42 christos Exp $ */ /* @@ -67,16 +67,16 @@ sys_getpid(struct proc *p, void *v, register_t *retval) return (0); } -#ifdef RTHREADS /* ARGSUSED */ int sys_getthrid(struct proc *p, void *v, register_t *retval) { + if (!rthreads_enabled) + return (ENOTSUP); *retval = p->p_pid + (p->p_flag & P_THREAD ? 0 : THREAD_PID_OFFSET); return (0); } -#endif /* ARGSUSED */ int diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 17fca944c86..c7a5f2623c9 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sig.c,v 1.109 2010/06/28 23:00:30 guenther Exp $ */ +/* $OpenBSD: kern_sig.c,v 1.110 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */ /* @@ -97,12 +97,10 @@ cansignal(struct proc *p, struct pcred *pc, struct proc *q, int signum) if (p == q) return (1); /* process can always signal itself */ -#ifdef RTHREADS /* a thread can only be signalled from within the same process */ if (q->p_flag & P_THREAD) { return (p->p_p == q->p_p); } -#endif if (signum == SIGCONT && q->p_session == p->p_session) return (1); /* SIGCONT in session */ @@ -578,7 +576,6 @@ sys_kill(struct proc *cp, void *v, register_t *retval) if (SCARG(uap, pid) > 0) { enum signal_type type = SPROCESS; -#ifdef RTHREADS if (SCARG(uap, pid) > THREAD_PID_OFFSET) { if ((p = pfind(SCARG(uap, pid) - THREAD_PID_OFFSET)) == NULL) @@ -586,15 +583,11 @@ sys_kill(struct proc *cp, void *v, register_t *retval) if (p->p_flag & P_THREAD) return (ESRCH); type = STHREAD; - } else -#endif - { + } else { if ((p = pfind(SCARG(uap, pid))) == NULL) return (ESRCH); -#ifdef RTHREADS if (p->p_flag & P_THREAD) type = STHREAD; -#endif } /* kill single process */ @@ -800,9 +793,7 @@ ptsignal(struct proc *p, int signum, enum signal_type type) int s, prop; sig_t action; int mask; -#ifdef RTHREADS struct proc *q; -#endif int wakeparent = 0; #ifdef DIAGNOSTIC @@ -816,7 +807,6 @@ ptsignal(struct proc *p, int signum, enum signal_type type) mask = sigmask(signum); -#ifdef RTHREADS if (type == SPROCESS) { TAILQ_FOREACH(q, &p->p_p->ps_threads, p_thr_link) { /* ignore exiting threads */ @@ -830,7 +820,6 @@ ptsignal(struct proc *p, int signum, enum signal_type type) } } } -#endif if (type != SPROPAGATED) KNOTE(&p->p_p->ps_klist, NOTE_SIGNAL | signum); @@ -842,15 +831,12 @@ ptsignal(struct proc *p, int signum, enum signal_type type) */ if (p->p_flag & P_TRACED) action = SIG_DFL; -#ifdef RTHREADS else if (p->p_sigdivert & mask) { p->p_sigwait = signum; atomic_clearbits_int(&p->p_sigdivert, ~0); action = SIG_CATCH; wakeup(&p->p_sigdivert); - } -#endif - else { + } else { /* * If the signal is being ignored, * then we forget about it immediately. @@ -892,7 +878,6 @@ ptsignal(struct proc *p, int signum, enum signal_type type) atomic_setbits_int(&p->p_siglist, mask); -#ifdef RTHREADS /* * XXX delay processing of SA_STOP signals unless action == SIG_DFL? */ @@ -902,7 +887,6 @@ ptsignal(struct proc *p, int signum, enum signal_type type) ptsignal(q, signum, SPROPAGATED); } } -#endif /* * Defer further processing for signals which are held, @@ -1550,7 +1534,6 @@ sys_nosys(struct proc *p, void *v, register_t *retval) return (ENOSYS); } -#ifdef RTHREADS int sys_thrsigdivert(struct proc *p, void *v, register_t *retval) { @@ -1564,6 +1547,9 @@ sys_thrsigdivert(struct proc *p, void *v, register_t *retval) long long to_ticks = 0; int error; + if (!rthreads_enabled) + return (ENOTSUP); + m = NULL; mask = SCARG(uap, sigmask) &~ sigcantmask; @@ -1618,7 +1604,6 @@ sys_thrsigdivert(struct proc *p, void *v, register_t *retval) } return (error); } -#endif void initsiginfo(siginfo_t *si, int sig, u_long code, int type, union sigval val) diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 6a9b1f57b03..7fdd5e72d2d 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_synch.c,v 1.94 2010/06/10 17:54:12 deraadt Exp $ */ +/* $OpenBSD: kern_synch.c,v 1.95 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_synch.c,v 1.37 1996/04/22 01:38:37 christos Exp $ */ /* @@ -402,8 +402,6 @@ sys_sched_yield(struct proc *p, void *v, register_t *retval) return (0); } -#ifdef RTHREADS - int sys_thrsleep(struct proc *p, void *v, register_t *revtal) { @@ -419,6 +417,8 @@ sys_thrsleep(struct proc *p, void *v, register_t *revtal) long long to_ticks = 0; int error; + if (!rthreads_enabled) + return (ENOTSUP); if (SCARG(uap, tp) != NULL) { struct timespec now, ats; @@ -468,6 +468,8 @@ sys_thrwakeup(struct proc *p, void *v, register_t *retval) struct proc *q; int found = 0; + if (!rthreads_enabled) + return (ENOTSUP); TAILQ_FOREACH(q, &p->p_p->ps_threads, p_thr_link) { if (q->p_thrslpid == ident) { wakeup_one(&q->p_thrslpid); @@ -481,4 +483,3 @@ sys_thrwakeup(struct proc *p, void *v, register_t *retval) return (0); } -#endif diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 4306a15f999..125e8334668 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.184 2010/06/19 14:44:44 thib Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.185 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -121,6 +121,8 @@ int (*cpu_cpuspeed)(int *); void (*cpu_setperf)(int); int perflevel = 100; +int rthreads_enabled = 0; + /* * Lock to avoid too many processes vslocking a large amount of memory * at the same time. @@ -557,6 +559,9 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, case KERN_CPTIME2: return (sysctl_cptime2(name + 1, namelen -1, oldp, oldlenp, newp, newlen)); + case KERN_RTHREADS: + return (sysctl_int(oldp, oldlenp, newp, newlen, + &rthreads_enabled)); case KERN_CACHEPCT: { int opct, pgs; opct = bufcachepercent; diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master index 4430b4f2fca..b98cce3ccf5 100644 --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -1,4 +1,4 @@ -; $OpenBSD: syscalls.master,v 1.98 2010/01/18 19:09:39 schwarze Exp $ +; $OpenBSD: syscalls.master,v 1.99 2010/06/29 00:28:14 tedu Exp $ ; $NetBSD: syscalls.master,v 1.32 1996/04/23 10:24:21 mycroft Exp $ ; @(#)syscalls.master 8.2 (Berkeley) 1/13/94 @@ -595,7 +595,6 @@ 297 UNIMPL #endif 298 STD { int sys_sched_yield(void); } -#ifdef RTHREADS 299 STD { pid_t sys_getthrid(void); } 300 STD { int sys_thrsleep(void *ident, clockid_t clock_id, \ const struct timespec *tp, void *lock); } @@ -603,13 +602,6 @@ 302 STD { void sys_threxit(pid_t *notdead); } 303 STD { int sys_thrsigdivert(sigset_t sigmask, \ siginfo_t *info, const struct timespec *timeout); } -#else -299 UNIMPL -300 UNIMPL -301 UNIMPL -302 UNIMPL -303 UNIMPL -#endif 304 STD { int sys___getcwd(char *buf, size_t len); } 305 STD { int sys_adjfreq(const int64_t *freq, \ int64_t *oldfreq); } diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 4a53b096621..14c23d18730 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sysctl.h,v 1.103 2010/06/28 18:50:37 claudio Exp $ */ +/* $OpenBSD: sysctl.h,v 1.104 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: sysctl.h,v 1.16 1996/04/09 20:55:36 cgd Exp $ */ /* @@ -188,7 +188,8 @@ struct ctlname { #define KERN_CPTIME2 71 /* array: cp_time2 */ #define KERN_CACHEPCT 72 /* buffer cache % of physmem */ #define KERN_FILE2 73 /* struct: file entries */ -#define KERN_MAXID 74 /* number of valid kern ids */ +#define KERN_RTHREADS 74 /* kernel rthreads support enabled */ +#define KERN_MAXID 75 /* number of valid kern ids */ #define CTL_KERN_NAMES { \ { 0, 0 }, \ @@ -265,6 +266,7 @@ struct ctlname { { "cp_time2", CTLTYPE_STRUCT }, \ { "bufcachepercent", CTLTYPE_INT }, \ { "file2", CTLTYPE_STRUCT }, \ + { "rthreads", CTLTYPE_INT }, \ } /* diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 5b118286d60..c69ddd23b17 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -1,4 +1,4 @@ -/* $OpenBSD: systm.h,v 1.79 2010/04/20 22:05:44 tedu Exp $ */ +/* $OpenBSD: systm.h,v 1.80 2010/06/29 00:28:14 tedu Exp $ */ /* $NetBSD: systm.h,v 1.50 1996/06/09 04:55:09 briggs Exp $ */ /*- @@ -107,6 +107,8 @@ extern struct vnode *swapdev_vp;/* vnode equivalent to above */ struct proc; #define curproc curcpu()->ci_curproc +extern int rthreads_enabled; + typedef int sy_call_t(struct proc *, void *, register_t *); extern struct sysent { /* system call table */ |