33 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2#ifndef __ASM_VDSO_PROCESSOR_H3#define __ASM_VDSO_PROCESSOR_H4 5#ifndef __ASSEMBLY__6 7#include <asm-generic/barrier.h>8 9static inline void cpu_relax(void)10{11#ifdef __riscv_muldiv12 int dummy;13 /* In lieu of a halt instruction, induce a long-latency stall. */14 __asm__ __volatile__ ("div %0, %0, zero" : "=r" (dummy));15#endif16 17#ifdef CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE18 /*19 * Reduce instruction retirement.20 * This assumes the PC changes.21 */22 __asm__ __volatile__ ("pause");23#else24 /* Encoding of the pause instruction */25 __asm__ __volatile__ (".4byte 0x100000F");26#endif27 barrier();28}29 30#endif /* __ASSEMBLY__ */31 32#endif /* __ASM_VDSO_PROCESSOR_H */33