1 #ifndef _IPXE_FAULT_H 2 #define _IPXE_FAULT_H 3 4 /** @file 5 * 6 * Fault injection 7 * 8 */ 9 10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); 11 12 #include <stdint.h> 13 #include <config/fault.h> 14 15 extern int inject_fault_nonzero ( unsigned int rate ); 16 extern void inject_corruption_nonzero ( unsigned int rate, const void *data, 17 size_t len ); 18 19 /** 20 * Inject fault with a specified probability 21 * 22 * @v rate Reciprocal of fault probability (zero for no faults) 23 * @ret rc Return status code 24 */ 25 static inline __attribute__ (( always_inline )) int inject_fault(unsigned int rate)26inject_fault ( unsigned int rate ) { 27 28 /* Force dead code elimination in non-fault-injecting builds */ 29 if ( rate == 0 ) 30 return 0; 31 32 return inject_fault_nonzero ( rate ); 33 } 34 35 /** 36 * Corrupt data with a specified probability 37 * 38 * @v rate Reciprocal of fault probability (zero for no faults) 39 * @v data Data 40 * @v len Length of data 41 * @ret rc Return status code 42 */ 43 static inline __attribute__ (( always_inline )) void inject_corruption(unsigned int rate,const void * data,size_t len)44inject_corruption ( unsigned int rate, const void *data, size_t len ) { 45 46 /* Force dead code elimination in non-fault-injecting builds */ 47 if ( rate == 0 ) 48 return; 49 50 return inject_corruption_nonzero ( rate, data, len ); 51 } 52 53 #endif /* _IPXE_FAULT_H */ 54