• Paul Mundt's avatar
    sh: Idle loop chainsawing for SMP-based light sleep. · f533c3d3
    Paul Mundt authored
    This does a bit of chainsawing of the idle loop code to get light sleep
    working on SMP. Previously this was forcing secondary CPUs in to sleep
    mode with them not coming back if they didn't have their own local
    timers. Given that we use clockevents broadcasting by default, the CPU
    managing the clockevents can't have IRQs disabled before entering its
    sleep state.
    
    This unfortunately leaves us with the age-old need_resched() race in
    between local_irq_enable() and cpu_sleep(), but at present this is
    unavoidable. After some more experimentation it may be possible to layer
    on SR.BL bit manipulation over top of this scheme to inhibit the race
    condition, but given the current potential for missing wakeups, this is
    left as a future exercise.
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    f533c3d3
idle.c 3.03 KB