On Mon, Sep 17, 2007 at 04:20:28PM -0700, David Daney wrote: Hi David, > Ralf Baechle wrote: > > >Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx> > > > >diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c > >index f599e79..7ee0cb0 100644 > >--- a/arch/mips/kernel/cpu-probe.c > >+++ b/arch/mips/kernel/cpu-probe.c > >@@ -75,6 +75,26 @@ static void r4k_wait_irqoff(void) > > local_irq_enable(); > > } > > > >+/* > >+ * The RM7000 variant has to handle erratum 38. The workaround is to not > >+ * have any pending stores when the WAIT instruction is executed. > >+ */ > >+static void rm7k_wait_irqoff(void) > >+{ > >+ local_irq_disable(); > >+ if (!need_resched()) > >+ __asm__( > >+ " .set push \n" > >+ " .set mips3 \n" > >+ " .set noat \n" > >+ " mfc0 $1, $12 \n" > >+ " sync \n" > >+ " mtc0 $1, $12 \n" > >+ " wait \n" > >+ " .set pop \n"); > >+ local_irq_enable(); > >+} > >+ > > Technically, shouldn't that __asm__ be volatile? Gcc won't delete this asm because it has no return value that is it will treat it like a volatile asm. Ralf