diff options
Diffstat (limited to 'arch/sparc/include/asm/processor_64.h')
-rw-r--r-- | arch/sparc/include/asm/processor_64.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/sparc/include/asm/processor_64.h b/arch/sparc/include/asm/processor_64.h index 9cdf52eec48a..721e25f0e2ea 100644 --- a/arch/sparc/include/asm/processor_64.h +++ b/arch/sparc/include/asm/processor_64.h | |||
@@ -196,11 +196,16 @@ extern unsigned long get_wchan(struct task_struct *task); | |||
196 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc) | 196 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc) |
197 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->u_regs[UREG_FP]) | 197 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->u_regs[UREG_FP]) |
198 | 198 | ||
199 | /* Please see the commentary in asm/backoff.h for a description of | ||
200 | * what these instructions are doing and how they have been choosen. | ||
201 | * To make a long story short, we are trying to yield the current cpu | ||
202 | * strand during busy loops. | ||
203 | */ | ||
199 | #define cpu_relax() asm volatile("\n99:\n\t" \ | 204 | #define cpu_relax() asm volatile("\n99:\n\t" \ |
200 | "rd %%ccr, %%g0\n\t" \ | 205 | "rd %%ccr, %%g0\n\t" \ |
201 | "rd %%ccr, %%g0\n\t" \ | 206 | "rd %%ccr, %%g0\n\t" \ |
202 | "rd %%ccr, %%g0\n\t" \ | 207 | "rd %%ccr, %%g0\n\t" \ |
203 | ".section .pause_patch,\"ax\"\n\t"\ | 208 | ".section .pause_3insn_patch,\"ax\"\n\t"\ |
204 | ".word 99b\n\t" \ | 209 | ".word 99b\n\t" \ |
205 | "wr %%g0, 128, %%asr27\n\t" \ | 210 | "wr %%g0, 128, %%asr27\n\t" \ |
206 | "nop\n\t" \ | 211 | "nop\n\t" \ |