* Russell King - ARM Linux [100902 06:25]: > On Thu, Aug 19, 2010 at 10:38:11AM +0300, Tony Lindgren wrote: > > --- a/arch/arm/kernel/head.S > > +++ b/arch/arm/kernel/head.S > > @@ -346,8 +346,10 @@ __fixup_smp: > > bne smp_on_up @ no, assume UP > > mrc p15, 0, r0, c0, c0, 5 @ read MIDR > > movs r0, r0, lsr #30 > > - teqne r0, #3 @ check top two bits 00 or 11 > > - moveq pc, lr > > + teq r0, #0 @ check two top bits 00 > > + beq smp_on_up @ yes, assume UP > > + teq r0, #3 @ check top two bits 11 > > + movne pc, lr @ no, running on SMP hw > > This should be: > > movs r0, r0, lsr #30 > teqne r0, #3 > movne pc, lr > > so that 0 or 3 avoids the return. Actually should also handle value of 1: 31 30 0 0 Not using new register, assume not SMP 0 1 Not using new register, assume not SMP 1 0 Using new register, SMP 1 1 Using new register, UP So we should return early only if it's 2. Regards, Tony