Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
e5224f0f JP |
2 | #if IS_ENABLED(CONFIG_NET_DEVLINK) |
3 | ||
4 | #undef TRACE_SYSTEM | |
5 | #define TRACE_SYSTEM devlink | |
6 | ||
7 | #if !defined(_TRACE_DEVLINK_H) || defined(TRACE_HEADER_MULTI_READ) | |
8 | #define _TRACE_DEVLINK_H | |
9 | ||
10 | #include <linux/device.h> | |
11 | #include <net/devlink.h> | |
12 | #include <linux/tracepoint.h> | |
13 | ||
14 | /* | |
15 | * Tracepoint for devlink hardware message: | |
16 | */ | |
17 | TRACE_EVENT(devlink_hwmsg, | |
18 | TP_PROTO(const struct devlink *devlink, bool incoming, | |
19 | unsigned long type, const u8 *buf, size_t len), | |
20 | ||
21 | TP_ARGS(devlink, incoming, type, buf, len), | |
22 | ||
23 | TP_STRUCT__entry( | |
21314638 LR |
24 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
25 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
26 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
e5224f0f JP |
27 | __field(bool, incoming) |
28 | __field(unsigned long, type) | |
29 | __dynamic_array(u8, buf, len) | |
30 | __field(size_t, len) | |
31 | ), | |
32 | ||
33 | TP_fast_assign( | |
21314638 LR |
34 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
35 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
36 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
e5224f0f JP |
37 | __entry->incoming = incoming; |
38 | __entry->type = type; | |
39 | memcpy(__get_dynamic_array(buf), buf, len); | |
40 | __entry->len = len; | |
41 | ), | |
42 | ||
caeccd51 | 43 | TP_printk("bus_name=%s dev_name=%s driver_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%zu", |
e5224f0f | 44 | __get_str(bus_name), __get_str(dev_name), |
0e1824c9 | 45 | __get_str(driver_name), __entry->incoming, __entry->type, |
e5224f0f JP |
46 | (int) __entry->len, __get_dynamic_array(buf), __entry->len) |
47 | ); | |
48 | ||
57186a5f ND |
49 | /* |
50 | * Tracepoint for devlink hardware error: | |
51 | */ | |
52 | TRACE_EVENT(devlink_hwerr, | |
53 | TP_PROTO(const struct devlink *devlink, int err, const char *msg), | |
54 | ||
55 | TP_ARGS(devlink, err, msg), | |
56 | ||
57 | TP_STRUCT__entry( | |
21314638 LR |
58 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
59 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
60 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
57186a5f ND |
61 | __field(int, err) |
62 | __string(msg, msg) | |
63 | ), | |
64 | ||
65 | TP_fast_assign( | |
21314638 LR |
66 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
67 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
68 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
57186a5f ND |
69 | __entry->err = err; |
70 | __assign_str(msg, msg); | |
71 | ), | |
72 | ||
73 | TP_printk("bus_name=%s dev_name=%s driver_name=%s err=%d %s", | |
74 | __get_str(bus_name), __get_str(dev_name), | |
75 | __get_str(driver_name), __entry->err, __get_str(msg)) | |
76 | ); | |
77 | ||
c8e1da0b EBE |
78 | /* |
79 | * Tracepoint for devlink health message: | |
80 | */ | |
81 | TRACE_EVENT(devlink_health_report, | |
82 | TP_PROTO(const struct devlink *devlink, const char *reporter_name, | |
83 | const char *msg), | |
84 | ||
85 | TP_ARGS(devlink, reporter_name, msg), | |
86 | ||
87 | TP_STRUCT__entry( | |
21314638 LR |
88 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
89 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
90 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
d0ab772c | 91 | __string(reporter_name, reporter_name) |
c8e1da0b EBE |
92 | __string(msg, msg) |
93 | ), | |
94 | ||
95 | TP_fast_assign( | |
21314638 LR |
96 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
97 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
98 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
c8e1da0b EBE |
99 | __assign_str(reporter_name, reporter_name); |
100 | __assign_str(msg, msg); | |
101 | ), | |
102 | ||
103 | TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: %s", | |
104 | __get_str(bus_name), __get_str(dev_name), | |
105 | __get_str(driver_name), __get_str(reporter_name), | |
106 | __get_str(msg)) | |
107 | ); | |
108 | ||
109 | /* | |
110 | * Tracepoint for devlink health recover aborted message: | |
111 | */ | |
112 | TRACE_EVENT(devlink_health_recover_aborted, | |
113 | TP_PROTO(const struct devlink *devlink, const char *reporter_name, | |
114 | bool health_state, u64 time_since_last_recover), | |
115 | ||
116 | TP_ARGS(devlink, reporter_name, health_state, time_since_last_recover), | |
117 | ||
118 | TP_STRUCT__entry( | |
21314638 LR |
119 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
120 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
121 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
c8e1da0b EBE |
122 | __string(reporter_name, reporter_name) |
123 | __field(bool, health_state) | |
124 | __field(u64, time_since_last_recover) | |
125 | ), | |
126 | ||
127 | TP_fast_assign( | |
21314638 LR |
128 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
129 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
130 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
c8e1da0b EBE |
131 | __assign_str(reporter_name, reporter_name); |
132 | __entry->health_state = health_state; | |
133 | __entry->time_since_last_recover = time_since_last_recover; | |
134 | ), | |
135 | ||
136 | TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: health_state=%d time_since_last_recover=%llu recover aborted", | |
137 | __get_str(bus_name), __get_str(dev_name), | |
138 | __get_str(driver_name), __get_str(reporter_name), | |
139 | __entry->health_state, | |
140 | __entry->time_since_last_recover) | |
141 | ); | |
142 | ||
3167b27a EBE |
143 | /* |
144 | * Tracepoint for devlink health reporter state update: | |
145 | */ | |
146 | TRACE_EVENT(devlink_health_reporter_state_update, | |
147 | TP_PROTO(const struct devlink *devlink, const char *reporter_name, | |
148 | bool new_state), | |
149 | ||
150 | TP_ARGS(devlink, reporter_name, new_state), | |
151 | ||
152 | TP_STRUCT__entry( | |
21314638 LR |
153 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
154 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
155 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
3167b27a EBE |
156 | __string(reporter_name, reporter_name) |
157 | __field(u8, new_state) | |
158 | ), | |
159 | ||
160 | TP_fast_assign( | |
21314638 LR |
161 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
162 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
163 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
3167b27a EBE |
164 | __assign_str(reporter_name, reporter_name); |
165 | __entry->new_state = new_state; | |
166 | ), | |
167 | ||
168 | TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: new_state=%d", | |
169 | __get_str(bus_name), __get_str(dev_name), | |
170 | __get_str(driver_name), __get_str(reporter_name), | |
171 | __entry->new_state) | |
172 | ); | |
173 | ||
5b88823b IS |
174 | /* |
175 | * Tracepoint for devlink packet trap: | |
176 | */ | |
177 | TRACE_EVENT(devlink_trap_report, | |
178 | TP_PROTO(const struct devlink *devlink, struct sk_buff *skb, | |
179 | const struct devlink_trap_metadata *metadata), | |
180 | ||
181 | TP_ARGS(devlink, skb, metadata), | |
182 | ||
183 | TP_STRUCT__entry( | |
21314638 LR |
184 | __string(bus_name, devlink_to_dev(devlink)->bus->name) |
185 | __string(dev_name, dev_name(devlink_to_dev(devlink))) | |
186 | __string(driver_name, devlink_to_dev(devlink)->driver->name) | |
5b88823b IS |
187 | __string(trap_name, metadata->trap_name) |
188 | __string(trap_group_name, metadata->trap_group_name) | |
2a04b8d8 | 189 | __array(char, input_dev_name, IFNAMSIZ) |
5b88823b IS |
190 | ), |
191 | ||
192 | TP_fast_assign( | |
193 | struct net_device *input_dev = metadata->input_dev; | |
194 | ||
21314638 LR |
195 | __assign_str(bus_name, devlink_to_dev(devlink)->bus->name); |
196 | __assign_str(dev_name, dev_name(devlink_to_dev(devlink))); | |
197 | __assign_str(driver_name, devlink_to_dev(devlink)->driver->name); | |
5b88823b IS |
198 | __assign_str(trap_name, metadata->trap_name); |
199 | __assign_str(trap_group_name, metadata->trap_group_name); | |
2a04b8d8 | 200 | strscpy(__entry->input_dev_name, input_dev ? input_dev->name : "NULL", IFNAMSIZ); |
5b88823b IS |
201 | ), |
202 | ||
203 | TP_printk("bus_name=%s dev_name=%s driver_name=%s trap_name=%s " | |
204 | "trap_group_name=%s input_dev_name=%s", __get_str(bus_name), | |
205 | __get_str(dev_name), __get_str(driver_name), | |
206 | __get_str(trap_name), __get_str(trap_group_name), | |
2a04b8d8 | 207 | __entry->input_dev_name) |
5b88823b IS |
208 | ); |
209 | ||
e5224f0f JP |
210 | #endif /* _TRACE_DEVLINK_H */ |
211 | ||
212 | /* This part must be outside protection */ | |
213 | #include <trace/define_trace.h> | |
214 | ||
215 | #else /* CONFIG_NET_DEVLINK */ | |
216 | ||
217 | #if !defined(_TRACE_DEVLINK_H) | |
218 | #define _TRACE_DEVLINK_H | |
219 | ||
220 | #include <net/devlink.h> | |
221 | ||
222 | static inline void trace_devlink_hwmsg(const struct devlink *devlink, | |
223 | bool incoming, unsigned long type, | |
224 | const u8 *buf, size_t len) | |
225 | { | |
226 | } | |
227 | ||
57186a5f ND |
228 | static inline void trace_devlink_hwerr(const struct devlink *devlink, |
229 | int err, const char *msg) | |
230 | { | |
231 | } | |
e5224f0f JP |
232 | #endif /* _TRACE_DEVLINK_H */ |
233 | ||
234 | #endif |