| #undef TRACE_SYSTEM | 
 | #define TRACE_SYSTEM ras | 
 | #define TRACE_INCLUDE_FILE ras_event | 
 |  | 
 | #if !defined(_TRACE_HW_EVENT_MC_H) || defined(TRACE_HEADER_MULTI_READ) | 
 | #define _TRACE_HW_EVENT_MC_H | 
 |  | 
 | #include <linux/tracepoint.h> | 
 | #include <linux/edac.h> | 
 | #include <linux/ktime.h> | 
 |  | 
 | /* | 
 |  * Hardware Events Report | 
 |  * | 
 |  * Those events are generated when hardware detected a corrected or | 
 |  * uncorrected event, and are meant to replace the current API to report | 
 |  * errors defined on both EDAC and MCE subsystems. | 
 |  * | 
 |  * FIXME: Add events for handling memory errors originated from the | 
 |  *        MCE subsystem. | 
 |  */ | 
 |  | 
 | /* | 
 |  * Hardware-independent Memory Controller specific events | 
 |  */ | 
 |  | 
 | /* | 
 |  * Default error mechanisms for Memory Controller errors (CE and UE) | 
 |  */ | 
 | TRACE_EVENT(mc_event, | 
 |  | 
 | 	TP_PROTO(const unsigned int err_type, | 
 | 		 const char *error_msg, | 
 | 		 const char *label, | 
 | 		 const int error_count, | 
 | 		 const u8 mc_index, | 
 | 		 const s8 top_layer, | 
 | 		 const s8 mid_layer, | 
 | 		 const s8 low_layer, | 
 | 		 unsigned long address, | 
 | 		 const u8 grain_bits, | 
 | 		 unsigned long syndrome, | 
 | 		 const char *driver_detail), | 
 |  | 
 | 	TP_ARGS(err_type, error_msg, label, error_count, mc_index, | 
 | 		top_layer, mid_layer, low_layer, address, grain_bits, | 
 | 		syndrome, driver_detail), | 
 |  | 
 | 	TP_STRUCT__entry( | 
 | 		__field(	unsigned int,	error_type		) | 
 | 		__string(	msg,		error_msg		) | 
 | 		__string(	label,		label			) | 
 | 		__field(	u16,		error_count		) | 
 | 		__field(	u8,		mc_index		) | 
 | 		__field(	s8,		top_layer		) | 
 | 		__field(	s8,		middle_layer		) | 
 | 		__field(	s8,		lower_layer		) | 
 | 		__field(	long,		address			) | 
 | 		__field(	u8,		grain_bits		) | 
 | 		__field(	long,		syndrome		) | 
 | 		__string(	driver_detail,	driver_detail		) | 
 | 	), | 
 |  | 
 | 	TP_fast_assign( | 
 | 		__entry->error_type		= err_type; | 
 | 		__assign_str(msg, error_msg); | 
 | 		__assign_str(label, label); | 
 | 		__entry->error_count		= error_count; | 
 | 		__entry->mc_index		= mc_index; | 
 | 		__entry->top_layer		= top_layer; | 
 | 		__entry->middle_layer		= mid_layer; | 
 | 		__entry->lower_layer		= low_layer; | 
 | 		__entry->address		= address; | 
 | 		__entry->grain_bits		= grain_bits; | 
 | 		__entry->syndrome		= syndrome; | 
 | 		__assign_str(driver_detail, driver_detail); | 
 | 	), | 
 |  | 
 | 	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)", | 
 | 		  __entry->error_count, | 
 | 		  mc_event_error_type(__entry->error_type), | 
 | 		  __entry->error_count > 1 ? "s" : "", | 
 | 		  ((char *)__get_str(msg))[0] ? " " : "", | 
 | 		  __get_str(msg), | 
 | 		  __get_str(label), | 
 | 		  __entry->mc_index, | 
 | 		  __entry->top_layer, | 
 | 		  __entry->middle_layer, | 
 | 		  __entry->lower_layer, | 
 | 		  __entry->address, | 
 | 		  1 << __entry->grain_bits, | 
 | 		  __entry->syndrome, | 
 | 		  ((char *)__get_str(driver_detail))[0] ? " " : "", | 
 | 		  __get_str(driver_detail)) | 
 | ); | 
 |  | 
 | #endif /* _TRACE_HW_EVENT_MC_H */ | 
 |  | 
 | /* This part must be outside protection */ | 
 | #include <trace/define_trace.h> |