diff options
Diffstat (limited to 'extras/mini-os/arch/x86/sched.c')
-rw-r--r-- | extras/mini-os/arch/x86/sched.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/extras/mini-os/arch/x86/sched.c b/extras/mini-os/arch/x86/sched.c index e56479b90f..204980a564 100644 --- a/extras/mini-os/arch/x86/sched.c +++ b/extras/mini-os/arch/x86/sched.c @@ -91,10 +91,11 @@ static void stack_push(struct thread *thread, unsigned long value) *((unsigned long *)thread->sp) = value; } -struct thread* create_thread(char *name, void (*function)(void *), void *data) +/* Architecture specific setup of thread creation */ +struct thread* arch_create_thread(char *name, void (*function)(void *), + void *data) { struct thread *thread; - unsigned long flags; thread = xmalloc(struct thread); /* Allocate 2 pages for stack, stack will be 2pages aligned */ @@ -110,24 +111,9 @@ struct thread* create_thread(char *name, void (*function)(void *), void *data) stack_push(thread, (unsigned long) function); stack_push(thread, (unsigned long) data); thread->ip = (unsigned long) thread_starter; - - /* Not runable, not exited, not sleeping */ - thread->flags = 0; - thread->wakeup_time = 0LL; - set_runnable(thread); - local_irq_save(flags); - if(idle_thread != NULL) { - list_add_tail(&thread->thread_list, &idle_thread->thread_list); - } else if(function != idle_thread_fn) - { - printk("BUG: Not allowed to create thread before initialising scheduler.\n"); - BUG(); - } - local_irq_restore(flags); return thread; } - void run_idle_thread(void) { /* Switch stacks and run the thread */ |