ras_event.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #undef TRACE_SYSTEM
  2. #define TRACE_SYSTEM ras
  3. #define TRACE_INCLUDE_FILE ras_event
  4. #if !defined(_TRACE_HW_EVENT_MC_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_HW_EVENT_MC_H
  6. #include <linux/tracepoint.h>
  7. #include <linux/edac.h>
  8. #include <linux/ktime.h>
  9. /*
  10. * Hardware Events Report
  11. *
  12. * Those events are generated when hardware detected a corrected or
  13. * uncorrected event, and are meant to replace the current API to report
  14. * errors defined on both EDAC and MCE subsystems.
  15. *
  16. * FIXME: Add events for handling memory errors originated from the
  17. * MCE subsystem.
  18. */
  19. /*
  20. * Hardware-independent Memory Controller specific events
  21. */
  22. /*
  23. * Default error mechanisms for Memory Controller errors (CE and UE)
  24. */
  25. TRACE_EVENT(mc_event,
  26. TP_PROTO(const unsigned int err_type,
  27. const char *error_msg,
  28. const char *label,
  29. const int error_count,
  30. const u8 mc_index,
  31. const s8 top_layer,
  32. const s8 mid_layer,
  33. const s8 low_layer,
  34. unsigned long address,
  35. const u8 grain_bits,
  36. unsigned long syndrome,
  37. const char *driver_detail),
  38. TP_ARGS(err_type, error_msg, label, error_count, mc_index,
  39. top_layer, mid_layer, low_layer, address, grain_bits,
  40. syndrome, driver_detail),
  41. TP_STRUCT__entry(
  42. __field( unsigned int, error_type )
  43. __string( msg, error_msg )
  44. __string( label, label )
  45. __field( u16, error_count )
  46. __field( u8, mc_index )
  47. __field( s8, top_layer )
  48. __field( s8, middle_layer )
  49. __field( s8, lower_layer )
  50. __field( long, address )
  51. __field( u8, grain_bits )
  52. __field( long, syndrome )
  53. __string( driver_detail, driver_detail )
  54. ),
  55. TP_fast_assign(
  56. __entry->error_type = err_type;
  57. __assign_str(msg, error_msg);
  58. __assign_str(label, label);
  59. __entry->error_count = error_count;
  60. __entry->mc_index = mc_index;
  61. __entry->top_layer = top_layer;
  62. __entry->middle_layer = mid_layer;
  63. __entry->lower_layer = low_layer;
  64. __entry->address = address;
  65. __entry->grain_bits = grain_bits;
  66. __entry->syndrome = syndrome;
  67. __assign_str(driver_detail, driver_detail);
  68. ),
  69. TP_printk("%d %s error%s:%s%s on %s (mc:%d location:%d:%d:%d address:0x%08lx grain:%d syndrome:0x%08lx%s%s)",
  70. __entry->error_count,
  71. (__entry->error_type == HW_EVENT_ERR_CORRECTED) ? "Corrected" :
  72. ((__entry->error_type == HW_EVENT_ERR_FATAL) ?
  73. "Fatal" : "Uncorrected"),
  74. __entry->error_count > 1 ? "s" : "",
  75. ((char *)__get_str(msg))[0] ? " " : "",
  76. __get_str(msg),
  77. __get_str(label),
  78. __entry->mc_index,
  79. __entry->top_layer,
  80. __entry->middle_layer,
  81. __entry->lower_layer,
  82. __entry->address,
  83. 1 << __entry->grain_bits,
  84. __entry->syndrome,
  85. ((char *)__get_str(driver_detail))[0] ? " " : "",
  86. __get_str(driver_detail))
  87. );
  88. #endif /* _TRACE_HW_EVENT_MC_H */
  89. /* This part must be outside protection */
  90. #include <trace/define_trace.h>