]> Pileus Git - ~andy/linux/commitdiff
ARM: prefetch: add support for prefetchw using pldw on SMP ARMv7+ CPUs
authorWill Deacon <will.deacon@arm.com>
Wed, 26 Jun 2013 16:03:40 +0000 (17:03 +0100)
committerWill Deacon <will.deacon@arm.com>
Mon, 30 Sep 2013 15:42:55 +0000 (16:42 +0100)
SMP ARMv7 CPUs implement the pldw instruction, which allows them to
prefetch data cachelines in an exclusive state.

This patch defines the prefetchw macro using pldw for CPUs that support
it.

Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/include/asm/processor.h

index 26164c92fa308102de2d16965da706fa7a4bb2d7..c3d5fc124a054c6309ffacdb2845ff22fd5bfa56 100644 (file)
@@ -112,12 +112,19 @@ static inline void prefetch(const void *ptr)
                :: "p" (ptr));
 }
 
+#if __LINUX_ARM_ARCH__ >= 7 && defined(CONFIG_SMP)
 #define ARCH_HAS_PREFETCHW
-#define prefetchw(ptr) prefetch(ptr)
-
-#define ARCH_HAS_SPINLOCK_PREFETCH
-#define spin_lock_prefetch(x) do { } while (0)
-
+static inline void prefetchw(const void *ptr)
+{
+       __asm__ __volatile__(
+               ".arch_extension        mp\n"
+               __ALT_SMP_ASM(
+                       WASM(pldw)              "\t%a0",
+                       WASM(pld)               "\t%a0"
+               )
+               :: "p" (ptr));
+}
+#endif
 #endif
 
 #define HAVE_ARCH_PICK_MMAP_LAYOUT