mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 21:52:29 -04:00
The generic vDSO library expects a vdso/processor.h with an definition of cpu_relax(). Split out cpu_relax() into this dedicated header. Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Tested-by: Andreas Larsson <andreas@gaisler.com> Reviewed-by: Andreas Larsson <andreas@gaisler.com> Acked-by: Andreas Larsson <andreas@gaisler.com> Link: https://patch.msgid.link/20260304-vdso-sparc64-generic-2-v6-9-d8eb3b0e1410@linutronix.de
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 */
|