On 15 January 2011 16:11, Russell King - ARM Linux <li...@arm.linux.org.uk> 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html