|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | /* Copyright (c) 2019 Facebook */ | 
|  | #ifndef __ASM_GOTO_WORKAROUND_H | 
|  | #define __ASM_GOTO_WORKAROUND_H | 
|  |  | 
|  | /* | 
|  | * This will bring in asm_volatile_goto and asm_inline macro definitions | 
|  | * if enabled by compiler and config options. | 
|  | */ | 
|  | #include <linux/types.h> | 
|  |  | 
|  | #ifdef asm_volatile_goto | 
|  | #undef asm_volatile_goto | 
|  | #define asm_volatile_goto(x...) asm volatile("invalid use of asm_volatile_goto") | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * asm_inline is defined as asm __inline in "include/linux/compiler_types.h" | 
|  | * if supported by the kernel's CC (i.e CONFIG_CC_HAS_ASM_INLINE) which is not | 
|  | * supported by CLANG. | 
|  | */ | 
|  | #ifdef asm_inline | 
|  | #undef asm_inline | 
|  | #define asm_inline asm | 
|  | #endif | 
|  |  | 
|  | #define volatile(x...) volatile("") | 
|  | #endif |