Thread (8 messages) flat view 8 messages, 2 authors, 2011-01-17
STALE5720d

[PATCH] Remove CPU_32v6K dependencies in asm/spinlock.h

From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2011-01-17 10:15:25
Also in: linux-omap

On 15 January 2011 16:11, Russell King - ARM Linux
[off-list ref] 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.
[...]
quoted hunk ↗ jump to hunk
--- 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help