diff options
Diffstat (limited to 'arch/arm/include/asm/processor.h')
| -rw-r--r-- | arch/arm/include/asm/processor.h | 33 | 
1 files changed, 25 insertions, 8 deletions
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h index 413f3876341..c3d5fc124a0 100644 --- a/arch/arm/include/asm/processor.h +++ b/arch/arm/include/asm/processor.h @@ -22,6 +22,7 @@  #include <asm/hw_breakpoint.h>  #include <asm/ptrace.h>  #include <asm/types.h> +#include <asm/unified.h>  #ifdef __KERNEL__  #define STACK_TOP	((current->personality & ADDR_LIMIT_32BIT) ? \ @@ -87,6 +88,17 @@ unsigned long get_wchan(struct task_struct *p);  #define KSTK_EIP(tsk)	task_pt_regs(tsk)->ARM_pc  #define KSTK_ESP(tsk)	task_pt_regs(tsk)->ARM_sp +#ifdef CONFIG_SMP +#define __ALT_SMP_ASM(smp, up)						\ +	"9998:	" smp "\n"						\ +	"	.pushsection \".alt.smp.init\", \"a\"\n"		\ +	"	.long	9998b\n"					\ +	"	" up "\n"						\ +	"	.popsection\n" +#else +#define __ALT_SMP_ASM(smp, up)	up +#endif +  /*   * Prefetching support - only ARMv5.   */ @@ -97,17 +109,22 @@ static inline void prefetch(const void *ptr)  {  	__asm__ __volatile__(  		"pld\t%a0" -		: -		: "p" (ptr) -		: "cc"); +		:: "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  | 
