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