/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_SPARC_VDSO_PROCESSOR_H #define _ASM_SPARC_VDSO_PROCESSOR_H #include #if defined(__arch64__) /* Please see the commentary in asm/backoff.h for a description of * what these instructions are doing and how they have been chosen. * To make a long story short, we are trying to yield the current cpu * strand during busy loops. */ #ifdef BUILD_VDSO #define cpu_relax() asm volatile("\n99:\n\t" \ "rd %%ccr, %%g0\n\t" \ "rd %%ccr, %%g0\n\t" \ "rd %%ccr, %%g0\n\t" \ ::: "memory") #else /* ! BUILD_VDSO */ #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_3insn_patch,\"ax\"\n\t"\ ".word 99b\n\t" \ "wr %%g0, 128, %%asr27\n\t" \ "nop\n\t" \ "nop\n\t" \ ".previous" \ ::: "memory") #endif /* BUILD_VDSO */ #else /* ! __arch64__ */ #define cpu_relax() barrier() #endif /* __arch64__ */ #endif /* _ASM_SPARC_VDSO_PROCESSOR_H */