The small bits of code hiding behind rthreads_enabled aren't really experimental anymore. At this point, it's just one more knob you can twist to break your system.
Index: kern/kern_exit.c =================================================================== RCS file: /cvs/src/sys/kern/kern_exit.c,v retrieving revision 1.121 diff -u -p -r1.121 kern_exit.c --- kern/kern_exit.c 30 Mar 2013 06:32:25 -0000 1.121 +++ kern/kern_exit.c 5 Apr 2013 22:18:44 -0000 @@ -96,9 +96,6 @@ sys___threxit(struct proc *p, void *v, r 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))) { Index: kern/kern_fork.c =================================================================== RCS file: /cvs/src/sys/kern/kern_fork.c,v retrieving revision 1.145 diff -u -p -r1.145 kern_fork.c --- kern/kern_fork.c 14 Mar 2013 21:38:22 -0000 1.145 +++ kern/kern_fork.c 5 Apr 2013 22:18:44 -0000 @@ -243,8 +243,6 @@ fork1(struct proc *curp, int exitsig, in /* sanity check some flag combinations */ if (flags & FORK_THREAD) { - if (!rthreads_enabled) - return (ENOTSUP); if ((flags & (FORK_SIGHAND | FORK_NOZOMBIE)) != (FORK_SIGHAND | FORK_NOZOMBIE)) return (EINVAL); Index: kern/kern_prot.c =================================================================== RCS file: /cvs/src/sys/kern/kern_prot.c,v retrieving revision 1.55 diff -u -p -r1.55 kern_prot.c --- kern/kern_prot.c 1 Oct 2012 00:08:42 -0000 1.55 +++ kern/kern_prot.c 5 Apr 2013 22:18:44 -0000 @@ -72,8 +72,6 @@ int sys_getthrid(struct proc *p, void *v, register_t *retval) { - if (!rthreads_enabled) - return (ENOTSUP); *retval = p->p_pid + THREAD_PID_OFFSET; return (0); } Index: kern/kern_sig.c =================================================================== RCS file: /cvs/src/sys/kern/kern_sig.c,v retrieving revision 1.149 diff -u -p -r1.149 kern_sig.c --- kern/kern_sig.c 28 Mar 2013 16:55:25 -0000 1.149 +++ kern/kern_sig.c 5 Apr 2013 22:18:44 -0000 @@ -1612,9 +1612,6 @@ sys___thrsigdivert(struct proc *p, void long long to_ticks = 0; int error; - if (!rthreads_enabled) - return (ENOTSUP); - m = NULL; mask = SCARG(uap, sigmask) &~ sigcantmask; Index: kern/kern_synch.c =================================================================== RCS file: /cvs/src/sys/kern/kern_synch.c,v retrieving revision 1.104 diff -u -p -r1.104 kern_synch.c --- kern/kern_synch.c 21 Aug 2012 19:51:58 -0000 1.104 +++ kern/kern_synch.c 5 Apr 2013 22:18:44 -0000 @@ -409,10 +409,6 @@ sys___thrsleep(struct proc *p, void *v, long long to_ticks = 0; int abort, error; - if (!rthreads_enabled) { - *retval = ENOTSUP; - return (0); - } if (ident == 0) { *retval = EINVAL; return (0); @@ -496,9 +492,7 @@ sys___thrwakeup(struct proc *p, void *v, struct proc *q; int found = 0; - if (!rthreads_enabled) - *retval = ENOTSUP; - else if (ident == 0) + if (ident == 0) *retval = EINVAL; else { TAILQ_FOREACH(q, &p->p_p->ps_threads, p_thr_link) { Index: kern/kern_sysctl.c =================================================================== RCS file: /cvs/src/sys/kern/kern_sysctl.c,v retrieving revision 1.233 diff -u -p -r1.233 kern_sysctl.c --- kern/kern_sysctl.c 23 Mar 2013 21:22:20 -0000 1.233 +++ kern/kern_sysctl.c 5 Apr 2013 22:18:44 -0000 @@ -129,8 +129,6 @@ int (*cpu_cpuspeed)(int *); void (*cpu_setperf)(int); int perflevel = 100; -int rthreads_enabled = 1; - /* * Lock to avoid too many processes vslocking a large amount of memory * at the same time. @@ -565,9 +563,6 @@ kern_sysctl(int *name, u_int namelen, vo 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: { u_int64_t dmapages; int opct, pgs; Index: sys/sysctl.h =================================================================== RCS file: /cvs/src/sys/sys/sysctl.h,v retrieving revision 1.131 diff -u -p -r1.131 sysctl.h --- sys/sysctl.h 24 Mar 2013 00:09:31 -0000 1.131 +++ sys/sysctl.h 5 Apr 2013 22:18:44 -0000 @@ -174,7 +174,6 @@ 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_RTHREADS 74 /* kernel rthreads support enabled */ #define KERN_CONSDEV 75 /* dev_t: console terminal device */ #define KERN_NETLIVELOCKS 76 /* int: number of network livelocks */ #define KERN_POOL_DEBUG 77 /* int: enable pool_debug */ @@ -256,7 +255,7 @@ struct ctlname { { "cp_time2", CTLTYPE_STRUCT }, \ { "bufcachepercent", CTLTYPE_INT }, \ { "file2", CTLTYPE_STRUCT }, \ - { "rthreads", CTLTYPE_INT }, \ + { "rthreads", 0 }, \ { "consdev", CTLTYPE_STRUCT }, \ { "netlivelocks", CTLTYPE_INT }, \ { "pool_debug", CTLTYPE_INT }, \ Index: sys/systm.h =================================================================== RCS file: /cvs/src/sys/sys/systm.h,v retrieving revision 1.96 diff -u -p -r1.96 systm.h --- sys/systm.h 28 Mar 2013 16:41:39 -0000 1.96 +++ sys/systm.h 5 Apr 2013 22:18:44 -0000 @@ -110,8 +110,6 @@ struct proc; struct process; #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 */