forked from mirrors/linux
		
	The function override_function_with_return() is defined separately for each architecture and every architecture's definition is almost same with each other. E.g. x86 and powerpc both define function in its own asm/error-injection.h header and override_function_with_return() has the same definition, the only difference is that x86 defines an extra function just_return_func() but it is specific for x86 and is only used by x86's override_function_with_return(), so don't need to export this function. This patch consolidates override_function_with_return() definition into asm-generic/error-injection.h header, thus all architectures can use the common definition. As result, the architecture specific headers are removed; the include/linux/error-injection.h header also changes to include asm-generic/error-injection.h header rather than architecture header, furthermore, it includes linux/compiler.h for successful compilation. Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Leo Yan <leo.yan@linaro.org> Signed-off-by: Will Deacon <will@kernel.org>
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef _ASM_GENERIC_ERROR_INJECTION_H
 | 
						|
#define _ASM_GENERIC_ERROR_INJECTION_H
 | 
						|
 | 
						|
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
 | 
						|
enum {
 | 
						|
	EI_ETYPE_NONE,		/* Dummy value for undefined case */
 | 
						|
	EI_ETYPE_NULL,		/* Return NULL if failure */
 | 
						|
	EI_ETYPE_ERRNO,		/* Return -ERRNO if failure */
 | 
						|
	EI_ETYPE_ERRNO_NULL,	/* Return -ERRNO or NULL if failure */
 | 
						|
	EI_ETYPE_TRUE,		/* Return true if failure */
 | 
						|
};
 | 
						|
 | 
						|
struct error_injection_entry {
 | 
						|
	unsigned long	addr;
 | 
						|
	int		etype;
 | 
						|
};
 | 
						|
 | 
						|
struct pt_regs;
 | 
						|
 | 
						|
#ifdef CONFIG_FUNCTION_ERROR_INJECTION
 | 
						|
/*
 | 
						|
 * Whitelist ganerating macro. Specify functions which can be
 | 
						|
 * error-injectable using this macro.
 | 
						|
 */
 | 
						|
#define ALLOW_ERROR_INJECTION(fname, _etype)				\
 | 
						|
static struct error_injection_entry __used				\
 | 
						|
	__attribute__((__section__("_error_injection_whitelist")))	\
 | 
						|
	_eil_addr_##fname = {						\
 | 
						|
		.addr = (unsigned long)fname,				\
 | 
						|
		.etype = EI_ETYPE_##_etype,				\
 | 
						|
	};
 | 
						|
 | 
						|
void override_function_with_return(struct pt_regs *regs);
 | 
						|
#else
 | 
						|
#define ALLOW_ERROR_INJECTION(fname, _etype)
 | 
						|
 | 
						|
static inline void override_function_with_return(struct pt_regs *regs) { }
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* _ASM_GENERIC_ERROR_INJECTION_H */
 |