lk/kernel/thread.c
/** * @brief Become an idle thread * * This function marks the current thread as the idle thread -- the one which * executes when there is nothing else to do. This function does not return. * This function is called once at boot time. */ void thread_become_idle(void) { DEBUG_ASSERT(arch_ints_disabled());
thread_t *t = get_current_thread();
#if WITH_SMP char name[16]; snprintf(name, sizeof(name), "idle %d", arch_curr_cpu_num()); thread_set_name(name); #else thread_set_name("idle"); #endif
/* mark ourself as idle */ t->priority = IDLE_PRIORITY; t->flags |= THREAD_FLAG_IDLE; thread_set_pinned_cpu(t, arch_curr_cpu_num());
mp_set_curr_cpu_active(true); mp_set_cpu_idle(arch_curr_cpu_num());
/* enable interrupts and start the scheduler */ arch_enable_ints(); thread_yield();
idle_thread_routine(); }