Вызов init_idle()

Строка 490
init_idle () вызывается почти в конце start_kernel () с параметрами current и smp_processor_id () для подготовки start_kernel () для перепланировки.

kernel/sched.с
2643 void init init_idle(task_t *idle, int cpu)
2644 {

2645 runqueue_t *idle_rq = cpu_rq(cpu) , *rq = cpu_rq(task_cpu(idle));
2646 unsigned long flags; 2647

2648 local_irq_save(flags);
2649 double_rq_lock(idle_rq, rq); 2650
2 651 idle_rq->curr = idle_rq->idle = idle;
2652 deactivate_task(idle, rq) ;
2653 idle->array = NULL;
2654 idle->prio = MAX_PRIO;
2655 idle->state = TASK_RUNNING;
2656 set_task_cpu(idle, cpu);
2 657 double_rq_unlock(idle_rq, rq);
2658 set_tsk_need_resched(idle);
2659 local_irq_restore(flags); 2660
2661 /* Установка зарезервированного числа соединительных блокировок
* _outside_ ! */
2662 #ifdef CONFIG_PREEMPT
2663 idle->thread_info->preempt_count = (idle->lock_depth >= 0);
2664 #else
2665 idle->thread_info->preempt_count = 0;
очереди запроса процессора для процессора, на котором выполняется задача idle.
Строки 2652-2656
Эти строки убирают задачу idle из очереди запросов и перемещает ее в очередь запросов процессора сри.
Строки 2657-2659
Мы освобождаем блоки очереди запроса для заблокированной до этого очереди выполнения. Далее мы отмечаем задачу idle для перепланировки и восстанавливаем IRQ, которые были сохранены ранее. Наконец, мы устанавливаем счетчик приоритетного прерывания обслуживания, если настроено приоритетное прерывание обслуживания ядра.