Hi, On Thu, May 02, 2013 at 01:48:12PM -0700, David Daney wrote: > From: David Daney <david.daney@xxxxxxxxxx> > > As noted by Thomas Gleixner: > > commit cdbedc61c8 (mips: Use generic idle loop) broke MIPS as I did > not realize that MIPS wants to invoke the wait instructions with > interrupts enabled. > > Instead of enabling interrupts in arch_cpu_idle() as Thomas' initial > patch does, we follow Linus' suggestion of doing it in the assembly > code to prevent the compiler from rearranging things. > > Signed-off-by: David Daney <david.daney@xxxxxxxxxx> > Reported-by: EunBong Song <eunb.song@xxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Jonas Gorski <jogo@xxxxxxxxxxx> > --- > > This is only very lightly tested, we need more testing before > declaring it the definitive fix. I wonder what is the status of this patch? Or is there some alternative fix? I have Octeon+ board that hangs during 3.10-rc2 boot in spawn_ksoftirqd() without this. Also, this patch does not apply cleanly to 3.10-rc2 anymore... A. > arch/mips/kernel/genex.S | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S > index ecb347c..57cda9a 100644 > --- a/arch/mips/kernel/genex.S > +++ b/arch/mips/kernel/genex.S > @@ -132,12 +132,13 @@ LEAF(r4k_wait) > .set noreorder > /* start of rollback region */ > LONG_L t0, TI_FLAGS($28) > - nop > andi t0, _TIF_NEED_RESCHED > bnez t0, 1f > nop > - nop > - nop > + /* Enable interrupts so WAIT will complete */ > + mfc0 t0, CP0_STATUS > + ori t0, ST0_IE > + mtc0 t0, CP0_STATUS > .set mips3 > wait > /* end of rollback region (the region size must be power of two) */ > -- > 1.7.11.7 > >