diff options
author | dyson <dyson@FreeBSD.org> | 1997-12-12 04:00:59 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1997-12-12 04:00:59 +0000 |
commit | 1835b7ab0e1cc20dea62aa54c9eade228a7125e8 (patch) | |
tree | 8400027ba944bf72caf386f719695560a9ddfb86 /sys/kern/kern_linker.c | |
parent | 9fd84ad6938a14ba3d55c68ac7e2f33f284f4b6a (diff) | |
download | FreeBSD-src-1835b7ab0e1cc20dea62aa54c9eade228a7125e8.zip FreeBSD-src-1835b7ab0e1cc20dea62aa54c9eade228a7125e8.tar.gz |
We have had support for running the kernel daemons as threads for
quite a while, but forgot to do so. For now, this code supports
most daemons running as kernel threads in UP kernels, and as
full processes in SMP. We will soon be able to run them as
threads in SMP, but not yet.
Diffstat (limited to 'sys/kern/kern_linker.c')
-rw-r--r-- | sys/kern/kern_linker.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index ef83ab3..da4b198 100644 --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: kern_linker.c,v 1.3 1997/11/06 19:29:10 phk Exp $ + * $Id: kern_linker.c,v 1.4 1997/11/20 20:07:45 bde Exp $ */ #include <sys/param.h> @@ -37,6 +37,7 @@ #include <machine/cpu.h> #include <sys/module.h> #include <sys/linker.h> +#include <sys/unistd.h> linker_file_t linker_current_file; @@ -129,8 +130,18 @@ linker_file_sysinit(linker_file_t lf) break; case SI_TYPE_KTHREAD: +#if !defined(SMP) /* kernel thread*/ - if (fork(&proc0, NULL)) + if (fork1(&proc0, RFFDG|RFPROC|RFMEM)) + panic("fork kernel thread"); + cpu_set_fork_handler(pfind(proc0.p_retval[0]), + (*sipp)->func, (*sipp)->udata); + break; +#endif + + case SI_TYPE_KPROCESS: + /* kernel thread*/ + if (fork1(&proc0, RFFDG|RFPROC)) panic("fork kernel process"); cpu_set_fork_handler(pfind(proc0.p_retval[0]), (*sipp)->func, (*sipp)->udata); |