diff --git a/arch/lkl/kernel/setup.c b/arch/lkl/kernel/setup.c index c5593db5b16c0b..501d32175dc426 100644 --- a/arch/lkl/kernel/setup.c +++ b/arch/lkl/kernel/setup.c @@ -75,6 +75,7 @@ int __init lkl_start_kernel(struct lkl_host_operations *ops, } lkl_ops->sem_down(init_sem); + lkl_ops->sem_free(init_sem); current_thread_info()->tid = lkl_ops->thread_self(); lkl_cpu_change_owner(current_thread_info()->tid); diff --git a/arch/lkl/kernel/threads.c b/arch/lkl/kernel/threads.c index c217e89750104f..67deea0c245602 100644 --- a/arch/lkl/kernel/threads.c +++ b/arch/lkl/kernel/threads.c @@ -232,16 +232,16 @@ void threads_cnt_dec(void) void threads_cleanup(void) { - struct task_struct *p; + struct task_struct *p, *t; - for_each_process(p) { - struct thread_info *ti = task_thread_info(p); + for_each_process_thread(p, t) { + struct thread_info *ti = task_thread_info(t); - if (p->pid != 1) - WARN(!(p->flags & PF_KTHREAD), - "non kernel thread task %p\n", p->comm); - WARN(p->state == TASK_RUNNING, - "thread %s still running while halting\n", p->comm); + if (t->pid != 1 && !test_ti_thread_flag(ti, TIF_HOST_THREAD)) + WARN(!(t->flags & PF_KTHREAD), + "non kernel thread task %s\n", t->comm); + WARN(t->state == TASK_RUNNING, + "thread %s still running while halting\n", t->comm); kill_thread(ti); }