diff options
Diffstat (limited to 'arch/riscv/include/asm/vdso/processor.h')
| -rw-r--r-- | arch/riscv/include/asm/vdso/processor.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/riscv/include/asm/vdso/processor.h b/arch/riscv/include/asm/vdso/processor.h new file mode 100644 index 000000000000..c42f95dc8811 --- /dev/null +++ b/arch/riscv/include/asm/vdso/processor.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_VDSO_PROCESSOR_H +#define __ASM_VDSO_PROCESSOR_H + +#ifndef __ASSEMBLER__ + +#include <asm/barrier.h> +#include <asm/errata_list.h> +#include <asm/insn-def.h> + +static inline void cpu_relax(void) +{ +#ifdef __riscv_muldiv + int dummy; + /* In lieu of a halt instruction, induce a long-latency stall. */ + __asm__ __volatile__ ("div %0, %0, zero" : "=r" (dummy)); +#endif + + /* + * Reduce instruction retirement. + * This assumes the PC changes. + */ + ALT_RISCV_PAUSE(); + barrier(); +} + +#endif /* __ASSEMBLER__ */ + +#endif /* __ASM_VDSO_PROCESSOR_H */ |
