On 15 January 2011 16:11, Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> wrote: > SMP requires at least the ARMv6K extensions to be present, so if we're > running on SMP, the WFE and SEV instructions must be available. > > However, when we run on UP, the v6K extensions may not be available, > and so we don't want WFE/SEV to be in the instruction stream. ÂUse the > SMP alternatives infrastructure to replace these instructions with NOPs > if we build for SMP but run on UP. [...] > --- a/arch/arm/include/asm/spinlock.h > +++ b/arch/arm/include/asm/spinlock.h > @@ -5,17 +5,36 @@ > Â#error SMP not supported on pre-ARMv6 CPUs > Â#endif > > +/* > + * sev and wfe are ARMv6K extensions. ÂUniprocessor ARMv6 may not have the K > + * extensions, so when running on UP, we have to patch these instructions away. > + */ > +#define ALT_SMP(smp, up)                    \ > +    "9998: Â" smp "\n"                   Â\ > +    "    .pushsection \".alt.smp.init\", \"a\"\n"    Â\ > +    "    .long  9998b\n"                Â\ > +    "    " up "\n"                    \ > +    "    .popsection\n" > + > +#ifdef CONFIG_THUMB2_KERNEL > +#define SEV      ÂALT_SMP("sev.w", "nop.w") > +#define WFE(cond)   ÂALT_SMP("wfe" cond ".w", "nop.w") > +#else > +#define SEV      ÂALT_SMP("sev", "nop") > +#define WFE(cond)   ÂALT_SMP("wfe" cond, "nop") > +#endif In the SEV macro definition, can you also include the dsb? This barrier is only there because of sev, otherwise we don't need it (we have a dmb prior to releasing the lock). -- Catalin -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html