lwkt: Initialize LWKT objcache initialization to earlier place
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sat, 30 May 2015 13:15:04 +0000 (21:15 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 1 Jun 2015 02:51:17 +0000 (10:51 +0800)
So that calling lwkt_create w/o thread template could work during
early boot.

LWKT is now initialized before SOFTCLOCK, since SOFTCLOCK creates
per-cpu callout threads, though the creation uses thread template.

sys/kern/kern_proc.c
sys/kern/lwkt_thread.c
sys/sys/kernel.h
sys/sys/thread.h

index 435598e..1f89ce2 100644 (file)
@@ -190,7 +190,6 @@ procinit(void)
                LIST_INIT(&allpgrps[i]);
                lwkt_token_init(&proc_tokens[i], "allproc");
        }
-       lwkt_init();
        uihashinit();
 }
 
index 3abd1b1..514af4e 100644 (file)
@@ -276,7 +276,7 @@ _lwkt_thread_dtor(void *obj, void *privdata)
  * Nominally cache up to 32 thread + kstack structures.  Cache more on
  * systems with a lot of cpu cores.
  */
-void
+static void
 lwkt_init(void)
 {
     TUNABLE_INT("lwkt.cache_threads", &lwkt_cache_threads);
@@ -290,6 +290,7 @@ lwkt_init(void)
                                0, lwkt_cache_threads,
                                _lwkt_thread_ctor, _lwkt_thread_dtor, NULL);
 }
+SYSINIT(lwkt_init, SI_BOOT2_LWKT_INIT, SI_ORDER_FIRST, lwkt_init, NULL);
 
 /*
  * Schedule a thread to run.  As the current thread we can always safely
index 78e71c0..bbf0d21 100644 (file)
@@ -154,6 +154,7 @@ enum sysinit_sub_id {
        SI_BOOT2_FINISH_CPU     = 0x1a90000,    /* finish CPU startup */
        SI_BOOT2_CLOCKREG       = 0x1ac0000,    /* register available clocks */
        SI_BOOT2_OBJCACHE       = 0x1b00000,
+       SI_BOOT2_LWKT_INIT      = 0x1b40000,
        SI_BOOT2_SOFTCLOCK      = 0x1b80000,
        SI_BOOT2_CLOCKS         = 0x1c00000,    /* select & start clocks */
        SI_BOOT2_FINISH_SMP     = 0x1c80000,    /* SMP go (& synch clocks) */
index 3e5bcad..c6fa86b 100644 (file)
@@ -431,7 +431,6 @@ extern struct lwkt_token vnode_token;
 /*
  * Procedures
  */
-extern void lwkt_init(void);
 extern struct thread *lwkt_alloc_thread(struct thread *, int, int, int);
 extern void lwkt_init_thread(struct thread *, void *, int, int,
                             struct globaldata *);