diff options
Diffstat (limited to 'arch/sparc/include/asm/processor_64.h')
| -rw-r--r-- | arch/sparc/include/asm/processor_64.h | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h index 98656340946..9cdf52eec48 100644 --- a/arch/sparc/include/asm/processor_64.h +++ b/arch/sparc/include/asm/processor_64.h @@ -196,9 +196,16 @@ extern unsigned long get_wchan(struct task_struct *task);  #define KSTK_EIP(tsk)  (task_pt_regs(tsk)->tpc)  #define KSTK_ESP(tsk)  (task_pt_regs(tsk)->u_regs[UREG_FP]) -#define cpu_relax()	asm volatile("rd	%%ccr, %%g0\n\t" \ -				     "rd	%%ccr, %%g0\n\t" \ -				     "rd	%%ccr, %%g0" \ +#define cpu_relax()	asm volatile("\n99:\n\t"			\ +				     "rd	%%ccr, %%g0\n\t"	\ +				     "rd	%%ccr, %%g0\n\t"	\ +				     "rd	%%ccr, %%g0\n\t"	\ +				     ".section	.pause_patch,\"ax\"\n\t"\ +				     ".word	99b\n\t"		\ +				     "wr	%%g0, 128, %%asr27\n\t"	\ +				     "nop\n\t"				\ +				     "nop\n\t"				\ +				     ".previous"			\  				     ::: "memory")  /* Prefetch support.  This is tuned for UltraSPARC-III and later.  |