mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
sparc64: vdso: Introduce vdso/processor.h
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
This commit is contained in:
parent
d60c682bce
commit
e13e3059dc
|
|
@ -1,6 +1,9 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef ___ASM_SPARC_PROCESSOR_H
|
||||
#define ___ASM_SPARC_PROCESSOR_H
|
||||
|
||||
#include <asm/vdso/processor.h>
|
||||
|
||||
#if defined(__sparc__) && defined(__arch64__)
|
||||
#include <asm/processor_64.h>
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -91,8 +91,6 @@ unsigned long __get_wchan(struct task_struct *);
|
|||
extern struct task_struct *last_task_used_math;
|
||||
int do_mathemu(struct pt_regs *regs, struct task_struct *fpt);
|
||||
|
||||
#define cpu_relax() barrier()
|
||||
|
||||
extern void (*sparc_idle)(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -182,31 +182,6 @@ unsigned long __get_wchan(struct task_struct *task);
|
|||
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->tpc)
|
||||
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->u_regs[UREG_FP])
|
||||
|
||||
/* 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
|
||||
|
||||
/* Prefetch support. This is tuned for UltraSPARC-III and later.
|
||||
* UltraSPARC-I will treat these as nops, and UltraSPARC-II has
|
||||
* a shallower prefetch queue than later chips.
|
||||
|
|
|
|||
41
arch/sparc/include/asm/vdso/processor.h
Normal file
41
arch/sparc/include/asm/vdso/processor.h
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
/* 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 */
|
||||
Loading…
Reference in New Issue
Block a user