| 1 |
|
| 2 | |
| 3 | * Declarations for error reporting tracepoints.
|
| 4 | *
|
| 5 | * Copyright (C) 2021, Google LLC.
|
| 6 |
|
| 7 | #undef TRACE_SYSTEM
|
| 8 | #define TRACE_SYSTEM error_report
|
| 9 |
|
| 10 | #if !defined(_TRACE_ERROR_REPORT_H) || defined(TRACE_HEADER_MULTI_READ)
|
| 11 | #define _TRACE_ERROR_REPORT_H
|
| 12 |
|
| 13 | #include <linux/tracepoint.h>
|
| 14 |
|
| 15 | #ifndef __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
| 16 | #define __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
| 17 |
|
| 18 | enum error_detector {
|
| 19 | ERROR_DETECTOR_KFENCE,
|
| 20 | ERROR_DETECTOR_KASAN,
|
| 21 | ERROR_DETECTOR_WARN,
|
| 22 | };
|
| 23 |
|
| 24 | #endif
|
| 25 |
|
| 26 | #define error_detector_list \
|
| 27 | EM(ERROR_DETECTOR_KFENCE, "kfence") \
|
| 28 | EM(ERROR_DETECTOR_KASAN, "kasan") \
|
| 29 | EMe(ERROR_DETECTOR_WARN, "warning")
|
| 30 |
|
| 31 |
|
| 32 | #undef EM
|
| 33 | #undef EMe
|
| 34 |
|
| 35 | #define EM(a, b) TRACE_DEFINE_ENUM(a);
|
| 36 | #define EMe(a, b) TRACE_DEFINE_ENUM(a);
|
| 37 |
|
| 38 | error_detector_list
|
| 39 |
|
| 40 | #undef EM
|
| 41 | #undef EMe
|
| 42 |
|
| 43 | #define EM(a, b) { a, b },
|
| 44 | #define EMe(a, b) { a, b }
|
| 45 |
|
| 46 | #define show_error_detector_list(val) \
|
| 47 | __print_symbolic(val, error_detector_list)
|
| 48 |
|
| 49 | DECLARE_EVENT_CLASS(error_report_template,
|
| 50 | TP_PROTO(enum error_detector error_detector, unsigned long id),
|
| 51 | TP_ARGS(error_detector, id),
|
| 52 | TP_STRUCT__entry(__field(enum error_detector, error_detector)
|
| 53 | __field(unsigned long, id)),
|
| 54 | TP_fast_assign(__entry->error_detector = error_detector;
|
| 55 | __entry->id = id;),
|
| 56 | TP_printk("[%s] %lx",
|
| 57 | show_error_detector_list(__entry->error_detector),
|
| 58 | __entry->id));
|
| 59 |
|
| 60 | |
| 61 | * error_report_end - called after printing the error report
|
| 62 | * @error_detector: short string describing the error detection tool
|
| 63 | * @id: pseudo-unique descriptor identifying the report
|
| 64 | * (e.g. the memory access address)
|
| 65 | *
|
| 66 | * This event occurs right after a debugging tool finishes printing the error
|
| 67 | * report.
|
| 68 |
|
| 69 | DEFINE_EVENT(error_report_template, error_report_end,
|
| 70 | TP_PROTO(enum error_detector error_detector, unsigned long id),
|
| 71 | TP_ARGS(error_detector, id));
|
| 72 |
|
| 73 | #endif
|
| 74 |
|
| 75 |
|
| 76 | #include <trace/define_trace.h>
|