]> xenbits.xensource.com Git - people/liuw/rumprun.git/commitdiff
Make bmk_sched_init() jump from bootstrap thread to main thread.
authorAntti Kantee <pooka@iki.fi>
Mon, 20 Apr 2015 15:21:55 +0000 (15:21 +0000)
committerAntti Kantee <pooka@iki.fi>
Mon, 20 Apr 2015 15:21:55 +0000 (15:21 +0000)
Convert baremetal.

include/bmk-core/sched.h
platform/baremetal/arch/i386/locore32.S
platform/baremetal/kernel.c
platform/baremetal/sched.c
platform/xen/xen/kernel.c
platform/xen/xen/sched.c

index e58b707d818f1069822dbe9e1528e951615286d3..edc127c99f8bc6f915e7e9804aff856bd30fd664 100644 (file)
@@ -38,7 +38,7 @@ struct bmk_tcb {
 
 struct bmk_thread;
 
-void   bmk_sched_init(void);
+void   bmk_sched_init(void (*)(void));
 void   bmk_sched(void);
 void   bmk_sched_yield(void);
 
index 6d10d702883e57b1a6b05e614a911d238ea62837..c111bb278783ce9c8fa53c3322d60efcc4a26fcd 100644 (file)
@@ -10,7 +10,7 @@
 .long -(MULTIBOOT_HEADER_MAGIC+MYMULTIBOOT_FLAGS)
 
 .section bootstack
-.set stack_size, 65536
+.set stack_size, 4096
 .globl _bootstack
 .comm _bootstack, stack_size
 
index c5dbc6447f3961aff0218bc1750fbc1a245e6524..844434975ad0b59d0a82f137c5aa409712d47214 100644 (file)
@@ -154,6 +154,15 @@ parsemem(uint32_t addr, uint32_t len)
        return 0;
 }
 
+static void
+bmk_mainthread(void)
+{
+
+       _netbsd_init();
+       bmk_beforemain();
+       _netbsd_fini();
+}
+
 void
 bmk_main(struct multiboot_info *mbi)
 {
@@ -169,12 +178,10 @@ bmk_main(struct multiboot_info *mbi)
        if (parsemem(mbi->mmap_addr, mbi->mmap_length))
                return;
        bmk_cpu_init();
-       bmk_sched_init();
        bmk_isr_init();
 
-       _netbsd_init();
-       bmk_beforemain();
-       _netbsd_fini();
+       /* enough already, jump to main thread */
+       bmk_sched_init(bmk_mainthread);
 }
 
 /*
index ba814abb303435e1d68c226939429333b0d8cb7d..fd46ed8d0263c206aa03b62ad2756be2178e1577 100644 (file)
@@ -452,19 +452,22 @@ bmk_sched_wake(struct bmk_thread *thread)
        set_runnable(thread);
 }
 
-static struct bmk_thread init_thread;
-
 void
-bmk_sched_init(void)
+bmk_sched_init(void (*mainfun)(void))
 {
-       struct bmk_thread *thread = &init_thread;
+       struct bmk_thread *mainthread;
+       struct bmk_thread initthread;
 
-       bmk_strncpy(thread->bt_name, "init", sizeof(thread->bt_name)-1);
-       thread->bt_flags = 0;
-       thread->bt_wakeup_time = -1;
-       set_runnable(thread);
-       TAILQ_INSERT_TAIL(&threads, thread, bt_entries);
-       current_thread = thread;
+       mainthread = bmk_sched_create("main", NULL, 0,
+           (void (*)(void *))mainfun, NULL, NULL, 0);
+       if (mainthread == NULL)
+               bmk_platform_halt("failed to create main thread");
+
+       bmk_memset(&initthread, 0, sizeof(initthread));
+       bmk_strcpy(initthread.bt_name, "init");
+       sched_switch(&initthread, mainthread);
+
+       bmk_platform_halt("bmk_sched_init unreachable");
 }
 
 void
index 4abb1dfeed28fd3cf31dbcf417d0a2ac07a58c3c..ef3004ee8fb827ac55cd20a398ae996554db88a2 100644 (file)
@@ -171,7 +171,7 @@ void _minios_start_kernel(start_info_t *si)
     init_gnttab();
     
     /* Init scheduler. */
-    bmk_sched_init();
+    bmk_sched_init(NULL);
  
     /* Init XenBus */
     init_xenbus();
index 754113c39de7b968f5bd613e0bc684f616a26f22..e19e0cf9054d82bc231dc758af97a633fffacdc3 100644 (file)
@@ -468,7 +468,7 @@ idle_thread_fn(void *unused)
 }
 
 void
-bmk_sched_init(void)
+bmk_sched_init(void (*notused)(void))
 {
        minios_printk("Initialising scheduler\n");