On Thu, 25 Feb 2021 17:19:44 -0800 Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > +#define show_error_detector_list(val) \ > + __print_symbolic(val, error_detector_list) > + > +DECLARE_EVENT_CLASS(error_report_template, > + TP_PROTO(enum error_detector error_detector, unsigned long id), > + TP_ARGS(error_detector, id), > + TP_STRUCT__entry(__field(enum error_detector, error_detector) > + __field(unsigned long, id)), > + TP_fast_assign(__entry->error_detector = error_detector; > + __entry->id = id;), > + TP_printk("[%s] %lx", > + show_error_detector_list(__entry->error_detector), > + __entry->id)); > + > +/** This doesn't need to change right now, but FYI, do not follow checkpatch formatting for TRACE_EVENT() and friend macros. The above is really hard to read for a trace event. It should look like this: DECLARE_EVENT_CLASS(error_report_template, TP_PROTO(enum error_detector error_detector, unsigned long id), TP_ARGS(error_detector, id), TP_STRUCT__entry( __field(enum error_detector, error_detector) __field(unsigned long, id) ), TP_fast_assign( __entry->error_detector = error_detector; __entry->id = id; ), TP_printk("[%s] %lx", show_error_detector_list(__entry->error_detector), __entry->id) ); As it's not really a macro, but code, and see, it's MUCH easier to read! Because we see the prototype, the structure definition, the code that assigns that structure, and how to print it. Following what checkpatch says, is equivalent to writing code like this: void trace_error_report_template (enum error_detector error_detector, unsigned long id) { struct entry {enum error_detector error_detector; unsigned long id;}; __entry->error_detector = error_detector; __entry->id = id; printk("[%s] %lx", show_error_detector_list(__entry->error_detector), __entry->id)); } It doesn't need to be fixed now. I'll try to remember to fix it after it lands in my tree. -- Steve