Only an interrupt can wake the core from 'wait', enable interrupts locally before executing 'wait'. Signed-off-by: Manuel Lauss <manuel.lauss@xxxxxxxxx> --- Please add to the 3.10 queue, fixes a rather boring hang on boot. arch/mips/kernel/idle.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c index 3b09b88..6da2c0f 100644 --- a/arch/mips/kernel/idle.c +++ b/arch/mips/kernel/idle.c @@ -93,12 +93,13 @@ static void rm7k_wait_irqoff(void) } /* - * The Au1xxx wait is available only if using 32khz counter or - * external timer source, but specifically not CP0 Counter. - * alchemy/common/time.c may override cpu_wait! + * Au1 'wait' is only useful when the 32kHz counter is used as timer, + * since coreclock (and the cp0 counter) stops upon executing it. Only an + * interrupt can wake it, so they must be enabled before entering idle modes. */ static void au1k_wait(void) { + local_irq_enable(); __asm__( " .set mips3 \n" " cache 0x14, 0(%0) \n" @@ -112,7 +113,6 @@ static void au1k_wait(void) " nop \n" " .set mips0 \n" : : "r" (au1k_wait)); - local_irq_enable(); } static int __initdata nowait; -- 1.8.2.1