]> Pileus Git - ~andy/linux/blob - include/trace/events/ras.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[~andy/linux] / include / trace / events / ras.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM ras
3
4 #if !defined(_TRACE_AER_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_AER_H
6
7 #include <linux/tracepoint.h>
8 #include <linux/aer.h>
9
10
11 /*
12  * PCIe AER Trace event
13  *
14  * These events are generated when hardware detects a corrected or
15  * uncorrected event on a PCIe device. The event report has
16  * the following structure:
17  *
18  * char * dev_name -    The name of the slot where the device resides
19  *                      ([domain:]bus:device.function).
20  * u32 status -         Either the correctable or uncorrectable register
21  *                      indicating what error or errors have been seen
22  * u8 severity -        error severity 0:NONFATAL 1:FATAL 2:CORRECTED
23  */
24
25 #define aer_correctable_errors          \
26         {BIT(0),        "Receiver Error"},              \
27         {BIT(6),        "Bad TLP"},                     \
28         {BIT(7),        "Bad DLLP"},                    \
29         {BIT(8),        "RELAY_NUM Rollover"},          \
30         {BIT(12),       "Replay Timer Timeout"},        \
31         {BIT(13),       "Advisory Non-Fatal"}
32
33 #define aer_uncorrectable_errors                \
34         {BIT(4),        "Data Link Protocol"},          \
35         {BIT(12),       "Poisoned TLP"},                \
36         {BIT(13),       "Flow Control Protocol"},       \
37         {BIT(14),       "Completion Timeout"},          \
38         {BIT(15),       "Completer Abort"},             \
39         {BIT(16),       "Unexpected Completion"},       \
40         {BIT(17),       "Receiver Overflow"},           \
41         {BIT(18),       "Malformed TLP"},               \
42         {BIT(19),       "ECRC"},                        \
43         {BIT(20),       "Unsupported Request"}
44
45 TRACE_EVENT(aer_event,
46         TP_PROTO(const char *dev_name,
47                  const u32 status,
48                  const u8 severity),
49
50         TP_ARGS(dev_name, status, severity),
51
52         TP_STRUCT__entry(
53                 __string(       dev_name,       dev_name        )
54                 __field(        u32,            status          )
55                 __field(        u8,             severity        )
56         ),
57
58         TP_fast_assign(
59                 __assign_str(dev_name, dev_name);
60                 __entry->status         = status;
61                 __entry->severity       = severity;
62         ),
63
64         TP_printk("%s PCIe Bus Error: severity=%s, %s\n",
65                 __get_str(dev_name),
66                 __entry->severity == AER_CORRECTABLE ? "Corrected" :
67                         __entry->severity == AER_FATAL ?
68                         "Fatal" : "Uncorrected, non-fatal",
69                 __entry->severity == AER_CORRECTABLE ?
70                 __print_flags(__entry->status, "|", aer_correctable_errors) :
71                 __print_flags(__entry->status, "|", aer_uncorrectable_errors))
72 );
73
74 #endif /* _TRACE_AER_H */
75
76 /* This part must be outside protection */
77 #include <trace/define_trace.h>