Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
Note: File does not exist in v3.1.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _ASM_GENERIC_ERROR_INJECTION_H
 3#define _ASM_GENERIC_ERROR_INJECTION_H
 4
 5#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
 6enum {
 7	EI_ETYPE_NONE,		/* Dummy value for undefined case */
 8	EI_ETYPE_NULL,		/* Return NULL if failure */
 9	EI_ETYPE_ERRNO,		/* Return -ERRNO if failure */
10	EI_ETYPE_ERRNO_NULL,	/* Return -ERRNO or NULL if failure */
11	EI_ETYPE_TRUE,		/* Return true if failure */
12};
13
14struct error_injection_entry {
15	unsigned long	addr;
16	int		etype;
17};
18
19struct pt_regs;
20
21#ifdef CONFIG_FUNCTION_ERROR_INJECTION
22/*
23 * Whitelist ganerating macro. Specify functions which can be
24 * error-injectable using this macro.
25 */
26#define ALLOW_ERROR_INJECTION(fname, _etype)				\
27static struct error_injection_entry __used				\
28	__attribute__((__section__("_error_injection_whitelist")))	\
29	_eil_addr_##fname = {						\
30		.addr = (unsigned long)fname,				\
31		.etype = EI_ETYPE_##_etype,				\
32	};
33
34void override_function_with_return(struct pt_regs *regs);
35#else
36#define ALLOW_ERROR_INJECTION(fname, _etype)
37
38static inline void override_function_with_return(struct pt_regs *regs) { }
39#endif
40#endif
41
42#endif /* _ASM_GENERIC_ERROR_INJECTION_H */