42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
/* 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 */
|