From 6bf59cd2289a26ab63a71996f20a83f65f362047 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Wed, 27 Dec 2006 20:41:59 +0000 Subject: [PATCH] Make a chunk of low level initialization code for proc0 and thread0 machine independant via a new procedure, mi_proc0init(). --- sys/kern/init_main.c | 27 ++++++++++++++++++++++++++- sys/platform/pc32/i386/machdep.c | 17 ++--------------- sys/sys/systm.h | 4 +++- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index de81723559..28f5783944 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -40,7 +40,7 @@ * * @(#)init_main.c 8.9 (Berkeley) 1/21/94 * $FreeBSD: src/sys/kern/init_main.c,v 1.134.2.8 2003/06/06 20:21:32 tegge Exp $ - * $DragonFly: src/sys/kern/init_main.c,v 1.68 2006/12/23 00:35:03 swildner Exp $ + * $DragonFly: src/sys/kern/init_main.c,v 1.69 2006/12/27 20:41:57 dillon Exp $ */ #include "opt_init_path.h" @@ -145,6 +145,31 @@ sysinit_add(struct sysinit **set, struct sysinit **set_end) newsysinit_end = newset + count; } +/* + * Callbacks from machine-dependant startup code (e.g. init386) to set + * up low level entities related to cpu #0's globaldata. + * + * Called from very low level boot code. + */ +void +mi_proc0init(struct globaldata *gd, struct user *proc0paddr) +{ + lwkt_init_thread(&thread0, proc0paddr, LWKT_THREAD_STACK, 0, gd); + lwkt_set_comm(&thread0, "thread0"); + proc0.p_addr = (void *)thread0.td_kstack; + LIST_INIT(&proc0.p_lwps); + LIST_INSERT_HEAD(&proc0.p_lwps, &proc0.p_lwp, lwp_list); + proc0.p_lwp.lwp_thread = &thread0; + proc0.p_lwp.lwp_proc = &proc0; + proc0.p_usched = usched_init(); + proc0.p_lwp.lwp_cpumask = 0xFFFFFFFF; + varsymset_init(&proc0.p_varsymset, NULL); + thread0.td_flags |= TDF_RUNNING; + thread0.td_proc = &proc0; + thread0.td_lwp = &proc0.p_lwp; + thread0.td_switch = cpu_heavy_switch; /* YYY eventually LWKT */ +} + /* * System startup; initialize the world, create process 0, mount root * filesystem, and fork to create init and pagedaemon. Most of the diff --git a/sys/platform/pc32/i386/machdep.c b/sys/platform/pc32/i386/machdep.c index f5d92e5a6f..80fff55292 100644 --- a/sys/platform/pc32/i386/machdep.c +++ b/sys/platform/pc32/i386/machdep.c @@ -36,7 +36,7 @@ * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.385.2.30 2003/05/31 08:48:05 alc Exp $ - * $DragonFly: src/sys/platform/pc32/i386/machdep.c,v 1.106 2006/12/23 00:27:03 swildner Exp $ + * $DragonFly: src/sys/platform/pc32/i386/machdep.c,v 1.107 2006/12/27 20:41:59 dillon Exp $ */ #include "use_apm.h" @@ -1867,20 +1867,7 @@ init386(int first) mi_gdinit(&gd->mi, 0); cpu_gdinit(gd, 0); - lwkt_init_thread(&thread0, proc0paddr, LWKT_THREAD_STACK, 0, &gd->mi); - lwkt_set_comm(&thread0, "thread0"); - proc0.p_addr = (void *)thread0.td_kstack; - LIST_INIT(&proc0.p_lwps); - LIST_INSERT_HEAD(&proc0.p_lwps, &proc0.p_lwp, lwp_list); - proc0.p_lwp.lwp_thread = &thread0; - proc0.p_lwp.lwp_proc = &proc0; - proc0.p_usched = usched_init(); - proc0.p_lwp.lwp_cpumask = 0xFFFFFFFF; - varsymset_init(&proc0.p_varsymset, NULL); - thread0.td_flags |= TDF_RUNNING; - thread0.td_proc = &proc0; - thread0.td_lwp = &proc0.p_lwp; - thread0.td_switch = cpu_heavy_switch; /* YYY eventually LWKT */ + mi_proc0init(&gd->mi, proc0paddr); safepri = TDPRI_MAX; /* make ldt memory segments */ diff --git a/sys/sys/systm.h b/sys/sys/systm.h index bfc3e9b768..a2b4e13c56 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -37,7 +37,7 @@ * * @(#)systm.h 8.7 (Berkeley) 3/29/95 * $FreeBSD: src/sys/sys/systm.h,v 1.111.2.18 2002/12/17 18:04:02 sam Exp $ - * $DragonFly: src/sys/sys/systm.h,v 1.56 2006/12/27 17:20:28 tgen Exp $ + * $DragonFly: src/sys/sys/systm.h,v 1.57 2006/12/27 20:41:58 dillon Exp $ */ #ifndef _SYS_SYSTM_H_ @@ -124,10 +124,12 @@ struct uio; struct globaldata; struct thread; struct trapframe; +struct user; void Debugger (const char *msg); void backtrace(void); void mi_gdinit (struct globaldata *gd, int cpu); +void mi_proc0init(struct globaldata *gd, struct user *proc0paddr); int dumpstatus (vm_offset_t addr, off_t count); int nullop (void); int seltrue (cdev_t dev, int which); -- 2.41.0