summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_linker.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1997-12-12 04:00:59 +0000
committerdyson <dyson@FreeBSD.org>1997-12-12 04:00:59 +0000
commit1835b7ab0e1cc20dea62aa54c9eade228a7125e8 (patch)
tree8400027ba944bf72caf386f719695560a9ddfb86 /sys/kern/kern_linker.c
parent9fd84ad6938a14ba3d55c68ac7e2f33f284f4b6a (diff)
downloadFreeBSD-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.c15
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);
OpenPOWER on IntegriCloud