You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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