aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include/asm/processor_64.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/include/asm/processor_64.h')
-rw-r--r--arch/sparc/include/asm/processor_64.h7
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" \