Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  • Valentin Schneider's avatar
    sched/core: Initialize the idle task with preemption disabled · f1a0a376
    Valentin Schneider authored
    As pointed out by commit
    
      de9b8f5d ("sched: Fix crash trying to dequeue/enqueue the idle thread")
    
    init_idle() can and will be invoked more than once on the same idle
    task. At boot time, it is invoked for the boot CPU thread by
    sched_init(). Then smp_init() creates the threads for all the secondary
    CPUs and invokes init_idle() on them.
    
    As the hotplug machinery brings the secondaries to life, it will issue
    calls to idle_thread_get(), which itself invokes init_idle() yet again.
    In this case it's invoked twice more per secondary: at _cpu_up(), and at
    bringup_cpu().
    
    Given smp_init() already initializes the idle tasks for all *possible*
    CPUs, no further initialization should be required. Now, removing
    init_idle() from idle_thread_get() exposes some interesting expectations
    with regards to the idle task's preempt_count: the secondary startup always
    issues a preempt_disable(), requiring some reset of the preempt count to 0
    between hot-unplug a...
    f1a0a376
Forked from BeagleBoard.org / Linux
Loading