41 lines · 1.1 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_SPARC_VDSO_PROCESSOR_H#define _ASM_SPARC_VDSO_PROCESSOR_H #include <linux/compiler.h> #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 */