Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | /* |
3 | * Copyright (c) 2017, 2018 Oracle. All rights reserved. |
4 | * |
5 | * Trace point definitions for the "rpcrdma" subsystem. |
6 | */ |
7 | #undef TRACE_SYSTEM |
8 | #define TRACE_SYSTEM rpcrdma |
9 | |
10 | #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) |
11 | #define _TRACE_RPCRDMA_H |
12 | |
13 | #include <linux/scatterlist.h> |
14 | #include <linux/sunrpc/rpc_rdma_cid.h> |
15 | #include <linux/tracepoint.h> |
16 | #include <rdma/ib_cm.h> |
17 | |
18 | #include <trace/misc/rdma.h> |
19 | #include <trace/misc/sunrpc.h> |
20 | |
21 | /** |
22 | ** Event classes |
23 | **/ |
24 | |
25 | DECLARE_EVENT_CLASS(rpcrdma_completion_class, |
26 | TP_PROTO( |
27 | const struct ib_wc *wc, |
28 | const struct rpc_rdma_cid *cid |
29 | ), |
30 | |
31 | TP_ARGS(wc, cid), |
32 | |
33 | TP_STRUCT__entry( |
34 | __field(u32, cq_id) |
35 | __field(int, completion_id) |
36 | __field(unsigned long, status) |
37 | __field(unsigned int, vendor_err) |
38 | ), |
39 | |
40 | TP_fast_assign( |
41 | __entry->cq_id = cid->ci_queue_id; |
42 | __entry->completion_id = cid->ci_completion_id; |
43 | __entry->status = wc->status; |
44 | if (wc->status) |
45 | __entry->vendor_err = wc->vendor_err; |
46 | else |
47 | __entry->vendor_err = 0; |
48 | ), |
49 | |
50 | TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", |
51 | __entry->cq_id, __entry->completion_id, |
52 | rdma_show_wc_status(__entry->status), |
53 | __entry->status, __entry->vendor_err |
54 | ) |
55 | ); |
56 | |
57 | #define DEFINE_COMPLETION_EVENT(name) \ |
58 | DEFINE_EVENT(rpcrdma_completion_class, name, \ |
59 | TP_PROTO( \ |
60 | const struct ib_wc *wc, \ |
61 | const struct rpc_rdma_cid *cid \ |
62 | ), \ |
63 | TP_ARGS(wc, cid)) |
64 | |
65 | DECLARE_EVENT_CLASS(rpcrdma_send_completion_class, |
66 | TP_PROTO( |
67 | const struct ib_wc *wc, |
68 | const struct rpc_rdma_cid *cid |
69 | ), |
70 | |
71 | TP_ARGS(wc, cid), |
72 | |
73 | TP_STRUCT__entry( |
74 | __field(u32, cq_id) |
75 | __field(int, completion_id) |
76 | ), |
77 | |
78 | TP_fast_assign( |
79 | __entry->cq_id = cid->ci_queue_id; |
80 | __entry->completion_id = cid->ci_completion_id; |
81 | ), |
82 | |
83 | TP_printk("cq.id=%u cid=%d", |
84 | __entry->cq_id, __entry->completion_id |
85 | ) |
86 | ); |
87 | |
88 | #define DEFINE_SEND_COMPLETION_EVENT(name) \ |
89 | DEFINE_EVENT(rpcrdma_send_completion_class, name, \ |
90 | TP_PROTO( \ |
91 | const struct ib_wc *wc, \ |
92 | const struct rpc_rdma_cid *cid \ |
93 | ), \ |
94 | TP_ARGS(wc, cid)) |
95 | |
96 | DECLARE_EVENT_CLASS(rpcrdma_send_flush_class, |
97 | TP_PROTO( |
98 | const struct ib_wc *wc, |
99 | const struct rpc_rdma_cid *cid |
100 | ), |
101 | |
102 | TP_ARGS(wc, cid), |
103 | |
104 | TP_STRUCT__entry( |
105 | __field(u32, cq_id) |
106 | __field(int, completion_id) |
107 | __field(unsigned long, status) |
108 | __field(unsigned int, vendor_err) |
109 | ), |
110 | |
111 | TP_fast_assign( |
112 | __entry->cq_id = cid->ci_queue_id; |
113 | __entry->completion_id = cid->ci_completion_id; |
114 | __entry->status = wc->status; |
115 | __entry->vendor_err = wc->vendor_err; |
116 | ), |
117 | |
118 | TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", |
119 | __entry->cq_id, __entry->completion_id, |
120 | rdma_show_wc_status(__entry->status), |
121 | __entry->status, __entry->vendor_err |
122 | ) |
123 | ); |
124 | |
125 | #define DEFINE_SEND_FLUSH_EVENT(name) \ |
126 | DEFINE_EVENT(rpcrdma_send_flush_class, name, \ |
127 | TP_PROTO( \ |
128 | const struct ib_wc *wc, \ |
129 | const struct rpc_rdma_cid *cid \ |
130 | ), \ |
131 | TP_ARGS(wc, cid)) |
132 | |
133 | DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, |
134 | TP_PROTO( |
135 | const struct ib_wc *wc, |
136 | const struct rpc_rdma_cid *cid |
137 | ), |
138 | |
139 | TP_ARGS(wc, cid), |
140 | |
141 | TP_STRUCT__entry( |
142 | __field(u32, cq_id) |
143 | __field(int, completion_id) |
144 | __field(unsigned long, status) |
145 | __field(unsigned int, vendor_err) |
146 | ), |
147 | |
148 | TP_fast_assign( |
149 | __entry->cq_id = cid->ci_queue_id; |
150 | __entry->completion_id = cid->ci_completion_id; |
151 | __entry->status = wc->status; |
152 | if (wc->status) |
153 | __entry->vendor_err = wc->vendor_err; |
154 | else |
155 | __entry->vendor_err = 0; |
156 | ), |
157 | |
158 | TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)", |
159 | __entry->cq_id, __entry->completion_id, |
160 | rdma_show_wc_status(__entry->status), |
161 | __entry->status, __entry->vendor_err |
162 | ) |
163 | ); |
164 | |
165 | #define DEFINE_MR_COMPLETION_EVENT(name) \ |
166 | DEFINE_EVENT(rpcrdma_mr_completion_class, name, \ |
167 | TP_PROTO( \ |
168 | const struct ib_wc *wc, \ |
169 | const struct rpc_rdma_cid *cid \ |
170 | ), \ |
171 | TP_ARGS(wc, cid)) |
172 | |
173 | DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class, |
174 | TP_PROTO( |
175 | const struct ib_wc *wc, |
176 | const struct rpc_rdma_cid *cid |
177 | ), |
178 | |
179 | TP_ARGS(wc, cid), |
180 | |
181 | TP_STRUCT__entry( |
182 | __field(u32, cq_id) |
183 | __field(int, completion_id) |
184 | __field(u32, received) |
185 | __field(unsigned long, status) |
186 | __field(unsigned int, vendor_err) |
187 | ), |
188 | |
189 | TP_fast_assign( |
190 | __entry->cq_id = cid->ci_queue_id; |
191 | __entry->completion_id = cid->ci_completion_id; |
192 | __entry->status = wc->status; |
193 | if (wc->status) { |
194 | __entry->received = 0; |
195 | __entry->vendor_err = wc->vendor_err; |
196 | } else { |
197 | __entry->received = wc->byte_len; |
198 | __entry->vendor_err = 0; |
199 | } |
200 | ), |
201 | |
202 | TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u", |
203 | __entry->cq_id, __entry->completion_id, |
204 | rdma_show_wc_status(__entry->status), |
205 | __entry->status, __entry->vendor_err, |
206 | __entry->received |
207 | ) |
208 | ); |
209 | |
210 | #define DEFINE_RECEIVE_COMPLETION_EVENT(name) \ |
211 | DEFINE_EVENT(rpcrdma_receive_completion_class, name, \ |
212 | TP_PROTO( \ |
213 | const struct ib_wc *wc, \ |
214 | const struct rpc_rdma_cid *cid \ |
215 | ), \ |
216 | TP_ARGS(wc, cid)) |
217 | |
218 | DECLARE_EVENT_CLASS(rpcrdma_receive_success_class, |
219 | TP_PROTO( |
220 | const struct ib_wc *wc, |
221 | const struct rpc_rdma_cid *cid |
222 | ), |
223 | |
224 | TP_ARGS(wc, cid), |
225 | |
226 | TP_STRUCT__entry( |
227 | __field(u32, cq_id) |
228 | __field(int, completion_id) |
229 | __field(u32, received) |
230 | ), |
231 | |
232 | TP_fast_assign( |
233 | __entry->cq_id = cid->ci_queue_id; |
234 | __entry->completion_id = cid->ci_completion_id; |
235 | __entry->received = wc->byte_len; |
236 | ), |
237 | |
238 | TP_printk("cq.id=%u cid=%d received=%u", |
239 | __entry->cq_id, __entry->completion_id, |
240 | __entry->received |
241 | ) |
242 | ); |
243 | |
244 | #define DEFINE_RECEIVE_SUCCESS_EVENT(name) \ |
245 | DEFINE_EVENT(rpcrdma_receive_success_class, name, \ |
246 | TP_PROTO( \ |
247 | const struct ib_wc *wc, \ |
248 | const struct rpc_rdma_cid *cid \ |
249 | ), \ |
250 | TP_ARGS(wc, cid)) |
251 | |
252 | DECLARE_EVENT_CLASS(rpcrdma_receive_flush_class, |
253 | TP_PROTO( |
254 | const struct ib_wc *wc, |
255 | const struct rpc_rdma_cid *cid |
256 | ), |
257 | |
258 | TP_ARGS(wc, cid), |
259 | |
260 | TP_STRUCT__entry( |
261 | __field(u32, cq_id) |
262 | __field(int, completion_id) |
263 | __field(unsigned long, status) |
264 | __field(unsigned int, vendor_err) |
265 | ), |
266 | |
267 | TP_fast_assign( |
268 | __entry->cq_id = cid->ci_queue_id; |
269 | __entry->completion_id = cid->ci_completion_id; |
270 | __entry->status = wc->status; |
271 | __entry->vendor_err = wc->vendor_err; |
272 | ), |
273 | |
274 | TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", |
275 | __entry->cq_id, __entry->completion_id, |
276 | rdma_show_wc_status(__entry->status), |
277 | __entry->status, __entry->vendor_err |
278 | ) |
279 | ); |
280 | |
281 | #define DEFINE_RECEIVE_FLUSH_EVENT(name) \ |
282 | DEFINE_EVENT(rpcrdma_receive_flush_class, name, \ |
283 | TP_PROTO( \ |
284 | const struct ib_wc *wc, \ |
285 | const struct rpc_rdma_cid *cid \ |
286 | ), \ |
287 | TP_ARGS(wc, cid)) |
288 | |
289 | DECLARE_EVENT_CLASS(xprtrdma_reply_class, |
290 | TP_PROTO( |
291 | const struct rpcrdma_rep *rep |
292 | ), |
293 | |
294 | TP_ARGS(rep), |
295 | |
296 | TP_STRUCT__entry( |
297 | __field(u32, xid) |
298 | __field(u32, version) |
299 | __field(u32, proc) |
300 | __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) |
301 | __string(port, rpcrdma_portstr(rep->rr_rxprt)) |
302 | ), |
303 | |
304 | TP_fast_assign( |
305 | __entry->xid = be32_to_cpu(rep->rr_xid); |
306 | __entry->version = be32_to_cpu(rep->rr_vers); |
307 | __entry->proc = be32_to_cpu(rep->rr_proc); |
308 | __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); |
309 | __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); |
310 | ), |
311 | |
312 | TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", |
313 | __get_str(addr), __get_str(port), |
314 | __entry->xid, __entry->version, __entry->proc |
315 | ) |
316 | ); |
317 | |
318 | #define DEFINE_REPLY_EVENT(name) \ |
319 | DEFINE_EVENT(xprtrdma_reply_class, \ |
320 | xprtrdma_reply_##name##_err, \ |
321 | TP_PROTO( \ |
322 | const struct rpcrdma_rep *rep \ |
323 | ), \ |
324 | TP_ARGS(rep)) |
325 | |
326 | DECLARE_EVENT_CLASS(xprtrdma_rxprt, |
327 | TP_PROTO( |
328 | const struct rpcrdma_xprt *r_xprt |
329 | ), |
330 | |
331 | TP_ARGS(r_xprt), |
332 | |
333 | TP_STRUCT__entry( |
334 | __string(addr, rpcrdma_addrstr(r_xprt)) |
335 | __string(port, rpcrdma_portstr(r_xprt)) |
336 | ), |
337 | |
338 | TP_fast_assign( |
339 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
340 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
341 | ), |
342 | |
343 | TP_printk("peer=[%s]:%s", |
344 | __get_str(addr), __get_str(port) |
345 | ) |
346 | ); |
347 | |
348 | #define DEFINE_RXPRT_EVENT(name) \ |
349 | DEFINE_EVENT(xprtrdma_rxprt, name, \ |
350 | TP_PROTO( \ |
351 | const struct rpcrdma_xprt *r_xprt \ |
352 | ), \ |
353 | TP_ARGS(r_xprt)) |
354 | |
355 | DECLARE_EVENT_CLASS(xprtrdma_connect_class, |
356 | TP_PROTO( |
357 | const struct rpcrdma_xprt *r_xprt, |
358 | int rc |
359 | ), |
360 | |
361 | TP_ARGS(r_xprt, rc), |
362 | |
363 | TP_STRUCT__entry( |
364 | __field(int, rc) |
365 | __field(int, connect_status) |
366 | __string(addr, rpcrdma_addrstr(r_xprt)) |
367 | __string(port, rpcrdma_portstr(r_xprt)) |
368 | ), |
369 | |
370 | TP_fast_assign( |
371 | __entry->rc = rc; |
372 | __entry->connect_status = r_xprt->rx_ep->re_connect_status; |
373 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
374 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
375 | ), |
376 | |
377 | TP_printk("peer=[%s]:%s rc=%d connection status=%d", |
378 | __get_str(addr), __get_str(port), |
379 | __entry->rc, __entry->connect_status |
380 | ) |
381 | ); |
382 | |
383 | #define DEFINE_CONN_EVENT(name) \ |
384 | DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ |
385 | TP_PROTO( \ |
386 | const struct rpcrdma_xprt *r_xprt, \ |
387 | int rc \ |
388 | ), \ |
389 | TP_ARGS(r_xprt, rc)) |
390 | |
391 | DECLARE_EVENT_CLASS(xprtrdma_rdch_event, |
392 | TP_PROTO( |
393 | const struct rpc_task *task, |
394 | unsigned int pos, |
395 | struct rpcrdma_mr *mr, |
396 | int nsegs |
397 | ), |
398 | |
399 | TP_ARGS(task, pos, mr, nsegs), |
400 | |
401 | TP_STRUCT__entry( |
402 | __field(unsigned int, task_id) |
403 | __field(unsigned int, client_id) |
404 | __field(unsigned int, pos) |
405 | __field(int, nents) |
406 | __field(u32, handle) |
407 | __field(u32, length) |
408 | __field(u64, offset) |
409 | __field(int, nsegs) |
410 | ), |
411 | |
412 | TP_fast_assign( |
413 | __entry->task_id = task->tk_pid; |
414 | __entry->client_id = task->tk_client->cl_clid; |
415 | __entry->pos = pos; |
416 | __entry->nents = mr->mr_nents; |
417 | __entry->handle = mr->mr_handle; |
418 | __entry->length = mr->mr_length; |
419 | __entry->offset = mr->mr_offset; |
420 | __entry->nsegs = nsegs; |
421 | ), |
422 | |
423 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER |
424 | " pos=%u %u@0x%016llx:0x%08x (%s)", |
425 | __entry->task_id, __entry->client_id, |
426 | __entry->pos, __entry->length, |
427 | (unsigned long long)__entry->offset, __entry->handle, |
428 | __entry->nents < __entry->nsegs ? "more" : "last" |
429 | ) |
430 | ); |
431 | |
432 | #define DEFINE_RDCH_EVENT(name) \ |
433 | DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ |
434 | TP_PROTO( \ |
435 | const struct rpc_task *task, \ |
436 | unsigned int pos, \ |
437 | struct rpcrdma_mr *mr, \ |
438 | int nsegs \ |
439 | ), \ |
440 | TP_ARGS(task, pos, mr, nsegs)) |
441 | |
442 | DECLARE_EVENT_CLASS(xprtrdma_wrch_event, |
443 | TP_PROTO( |
444 | const struct rpc_task *task, |
445 | struct rpcrdma_mr *mr, |
446 | int nsegs |
447 | ), |
448 | |
449 | TP_ARGS(task, mr, nsegs), |
450 | |
451 | TP_STRUCT__entry( |
452 | __field(unsigned int, task_id) |
453 | __field(unsigned int, client_id) |
454 | __field(int, nents) |
455 | __field(u32, handle) |
456 | __field(u32, length) |
457 | __field(u64, offset) |
458 | __field(int, nsegs) |
459 | ), |
460 | |
461 | TP_fast_assign( |
462 | __entry->task_id = task->tk_pid; |
463 | __entry->client_id = task->tk_client->cl_clid; |
464 | __entry->nents = mr->mr_nents; |
465 | __entry->handle = mr->mr_handle; |
466 | __entry->length = mr->mr_length; |
467 | __entry->offset = mr->mr_offset; |
468 | __entry->nsegs = nsegs; |
469 | ), |
470 | |
471 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER |
472 | " %u@0x%016llx:0x%08x (%s)", |
473 | __entry->task_id, __entry->client_id, |
474 | __entry->length, (unsigned long long)__entry->offset, |
475 | __entry->handle, |
476 | __entry->nents < __entry->nsegs ? "more" : "last" |
477 | ) |
478 | ); |
479 | |
480 | #define DEFINE_WRCH_EVENT(name) \ |
481 | DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ |
482 | TP_PROTO( \ |
483 | const struct rpc_task *task, \ |
484 | struct rpcrdma_mr *mr, \ |
485 | int nsegs \ |
486 | ), \ |
487 | TP_ARGS(task, mr, nsegs)) |
488 | |
489 | TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); |
490 | TRACE_DEFINE_ENUM(DMA_TO_DEVICE); |
491 | TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); |
492 | TRACE_DEFINE_ENUM(DMA_NONE); |
493 | |
494 | #define xprtrdma_show_direction(x) \ |
495 | __print_symbolic(x, \ |
496 | { DMA_BIDIRECTIONAL, "BIDIR" }, \ |
497 | { DMA_TO_DEVICE, "TO_DEVICE" }, \ |
498 | { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ |
499 | { DMA_NONE, "NONE" }) |
500 | |
501 | DECLARE_EVENT_CLASS(xprtrdma_mr_class, |
502 | TP_PROTO( |
503 | const struct rpcrdma_mr *mr |
504 | ), |
505 | |
506 | TP_ARGS(mr), |
507 | |
508 | TP_STRUCT__entry( |
509 | __field(unsigned int, task_id) |
510 | __field(unsigned int, client_id) |
511 | __field(u32, mr_id) |
512 | __field(int, nents) |
513 | __field(u32, handle) |
514 | __field(u32, length) |
515 | __field(u64, offset) |
516 | __field(u32, dir) |
517 | ), |
518 | |
519 | TP_fast_assign( |
520 | const struct rpcrdma_req *req = mr->mr_req; |
521 | |
522 | if (req) { |
523 | const struct rpc_task *task = req->rl_slot.rq_task; |
524 | |
525 | __entry->task_id = task->tk_pid; |
526 | __entry->client_id = task->tk_client->cl_clid; |
527 | } else { |
528 | __entry->task_id = 0; |
529 | __entry->client_id = -1; |
530 | } |
531 | __entry->mr_id = mr->mr_ibmr->res.id; |
532 | __entry->nents = mr->mr_nents; |
533 | __entry->handle = mr->mr_handle; |
534 | __entry->length = mr->mr_length; |
535 | __entry->offset = mr->mr_offset; |
536 | __entry->dir = mr->mr_dir; |
537 | ), |
538 | |
539 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER |
540 | " mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", |
541 | __entry->task_id, __entry->client_id, |
542 | __entry->mr_id, __entry->nents, __entry->length, |
543 | (unsigned long long)__entry->offset, __entry->handle, |
544 | xprtrdma_show_direction(__entry->dir) |
545 | ) |
546 | ); |
547 | |
548 | #define DEFINE_MR_EVENT(name) \ |
549 | DEFINE_EVENT(xprtrdma_mr_class, \ |
550 | xprtrdma_mr_##name, \ |
551 | TP_PROTO( \ |
552 | const struct rpcrdma_mr *mr \ |
553 | ), \ |
554 | TP_ARGS(mr)) |
555 | |
556 | DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, |
557 | TP_PROTO( |
558 | const struct rpcrdma_mr *mr |
559 | ), |
560 | |
561 | TP_ARGS(mr), |
562 | |
563 | TP_STRUCT__entry( |
564 | __field(u32, mr_id) |
565 | __field(int, nents) |
566 | __field(u32, handle) |
567 | __field(u32, length) |
568 | __field(u64, offset) |
569 | __field(u32, dir) |
570 | ), |
571 | |
572 | TP_fast_assign( |
573 | __entry->mr_id = mr->mr_ibmr->res.id; |
574 | __entry->nents = mr->mr_nents; |
575 | __entry->handle = mr->mr_handle; |
576 | __entry->length = mr->mr_length; |
577 | __entry->offset = mr->mr_offset; |
578 | __entry->dir = mr->mr_dir; |
579 | ), |
580 | |
581 | TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", |
582 | __entry->mr_id, __entry->nents, __entry->length, |
583 | (unsigned long long)__entry->offset, __entry->handle, |
584 | xprtrdma_show_direction(__entry->dir) |
585 | ) |
586 | ); |
587 | |
588 | #define DEFINE_ANON_MR_EVENT(name) \ |
589 | DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ |
590 | xprtrdma_mr_##name, \ |
591 | TP_PROTO( \ |
592 | const struct rpcrdma_mr *mr \ |
593 | ), \ |
594 | TP_ARGS(mr)) |
595 | |
596 | DECLARE_EVENT_CLASS(xprtrdma_callback_class, |
597 | TP_PROTO( |
598 | const struct rpcrdma_xprt *r_xprt, |
599 | const struct rpc_rqst *rqst |
600 | ), |
601 | |
602 | TP_ARGS(r_xprt, rqst), |
603 | |
604 | TP_STRUCT__entry( |
605 | __field(u32, xid) |
606 | __string(addr, rpcrdma_addrstr(r_xprt)) |
607 | __string(port, rpcrdma_portstr(r_xprt)) |
608 | ), |
609 | |
610 | TP_fast_assign( |
611 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
612 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
613 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
614 | ), |
615 | |
616 | TP_printk("peer=[%s]:%s xid=0x%08x", |
617 | __get_str(addr), __get_str(port), __entry->xid |
618 | ) |
619 | ); |
620 | |
621 | #define DEFINE_CALLBACK_EVENT(name) \ |
622 | DEFINE_EVENT(xprtrdma_callback_class, \ |
623 | xprtrdma_cb_##name, \ |
624 | TP_PROTO( \ |
625 | const struct rpcrdma_xprt *r_xprt, \ |
626 | const struct rpc_rqst *rqst \ |
627 | ), \ |
628 | TP_ARGS(r_xprt, rqst)) |
629 | |
630 | /** |
631 | ** Connection events |
632 | **/ |
633 | |
634 | TRACE_EVENT(xprtrdma_inline_thresh, |
635 | TP_PROTO( |
636 | const struct rpcrdma_ep *ep |
637 | ), |
638 | |
639 | TP_ARGS(ep), |
640 | |
641 | TP_STRUCT__entry( |
642 | __field(unsigned int, inline_send) |
643 | __field(unsigned int, inline_recv) |
644 | __field(unsigned int, max_send) |
645 | __field(unsigned int, max_recv) |
646 | __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) |
647 | __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) |
648 | ), |
649 | |
650 | TP_fast_assign( |
651 | const struct rdma_cm_id *id = ep->re_id; |
652 | |
653 | __entry->inline_send = ep->re_inline_send; |
654 | __entry->inline_recv = ep->re_inline_recv; |
655 | __entry->max_send = ep->re_max_inline_send; |
656 | __entry->max_recv = ep->re_max_inline_recv; |
657 | memcpy(__entry->srcaddr, &id->route.addr.src_addr, |
658 | sizeof(struct sockaddr_in6)); |
659 | memcpy(__entry->dstaddr, &id->route.addr.dst_addr, |
660 | sizeof(struct sockaddr_in6)); |
661 | ), |
662 | |
663 | TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", |
664 | __entry->srcaddr, __entry->dstaddr, |
665 | __entry->inline_send, __entry->inline_recv, |
666 | __entry->max_send, __entry->max_recv |
667 | ) |
668 | ); |
669 | |
670 | DEFINE_CONN_EVENT(connect); |
671 | DEFINE_CONN_EVENT(disconnect); |
672 | |
673 | DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); |
674 | |
675 | TRACE_EVENT(xprtrdma_op_connect, |
676 | TP_PROTO( |
677 | const struct rpcrdma_xprt *r_xprt, |
678 | unsigned long delay |
679 | ), |
680 | |
681 | TP_ARGS(r_xprt, delay), |
682 | |
683 | TP_STRUCT__entry( |
684 | __field(unsigned long, delay) |
685 | __string(addr, rpcrdma_addrstr(r_xprt)) |
686 | __string(port, rpcrdma_portstr(r_xprt)) |
687 | ), |
688 | |
689 | TP_fast_assign( |
690 | __entry->delay = delay; |
691 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
692 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
693 | ), |
694 | |
695 | TP_printk("peer=[%s]:%s delay=%lu", |
696 | __get_str(addr), __get_str(port), __entry->delay |
697 | ) |
698 | ); |
699 | |
700 | |
701 | TRACE_EVENT(xprtrdma_op_set_cto, |
702 | TP_PROTO( |
703 | const struct rpcrdma_xprt *r_xprt, |
704 | unsigned long connect, |
705 | unsigned long reconnect |
706 | ), |
707 | |
708 | TP_ARGS(r_xprt, connect, reconnect), |
709 | |
710 | TP_STRUCT__entry( |
711 | __field(unsigned long, connect) |
712 | __field(unsigned long, reconnect) |
713 | __string(addr, rpcrdma_addrstr(r_xprt)) |
714 | __string(port, rpcrdma_portstr(r_xprt)) |
715 | ), |
716 | |
717 | TP_fast_assign( |
718 | __entry->connect = connect; |
719 | __entry->reconnect = reconnect; |
720 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
721 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
722 | ), |
723 | |
724 | TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu", |
725 | __get_str(addr), __get_str(port), |
726 | __entry->connect / HZ, __entry->reconnect / HZ |
727 | ) |
728 | ); |
729 | |
730 | /** |
731 | ** Call events |
732 | **/ |
733 | |
734 | TRACE_EVENT(xprtrdma_createmrs, |
735 | TP_PROTO( |
736 | const struct rpcrdma_xprt *r_xprt, |
737 | unsigned int count |
738 | ), |
739 | |
740 | TP_ARGS(r_xprt, count), |
741 | |
742 | TP_STRUCT__entry( |
743 | __string(addr, rpcrdma_addrstr(r_xprt)) |
744 | __string(port, rpcrdma_portstr(r_xprt)) |
745 | __field(unsigned int, count) |
746 | ), |
747 | |
748 | TP_fast_assign( |
749 | __entry->count = count; |
750 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
751 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
752 | ), |
753 | |
754 | TP_printk("peer=[%s]:%s created %u MRs", |
755 | __get_str(addr), __get_str(port), __entry->count |
756 | ) |
757 | ); |
758 | |
759 | TRACE_EVENT(xprtrdma_nomrs_err, |
760 | TP_PROTO( |
761 | const struct rpcrdma_xprt *r_xprt, |
762 | const struct rpcrdma_req *req |
763 | ), |
764 | |
765 | TP_ARGS(r_xprt, req), |
766 | |
767 | TP_STRUCT__entry( |
768 | __field(unsigned int, task_id) |
769 | __field(unsigned int, client_id) |
770 | __string(addr, rpcrdma_addrstr(r_xprt)) |
771 | __string(port, rpcrdma_portstr(r_xprt)) |
772 | ), |
773 | |
774 | TP_fast_assign( |
775 | const struct rpc_rqst *rqst = &req->rl_slot; |
776 | |
777 | __entry->task_id = rqst->rq_task->tk_pid; |
778 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
779 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
780 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
781 | ), |
782 | |
783 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " peer=[%s]:%s", |
784 | __entry->task_id, __entry->client_id, |
785 | __get_str(addr), __get_str(port) |
786 | ) |
787 | ); |
788 | |
789 | DEFINE_RDCH_EVENT(read); |
790 | DEFINE_WRCH_EVENT(write); |
791 | DEFINE_WRCH_EVENT(reply); |
792 | DEFINE_WRCH_EVENT(wp); |
793 | |
794 | TRACE_DEFINE_ENUM(rpcrdma_noch); |
795 | TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); |
796 | TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); |
797 | TRACE_DEFINE_ENUM(rpcrdma_readch); |
798 | TRACE_DEFINE_ENUM(rpcrdma_areadch); |
799 | TRACE_DEFINE_ENUM(rpcrdma_writech); |
800 | TRACE_DEFINE_ENUM(rpcrdma_replych); |
801 | |
802 | #define xprtrdma_show_chunktype(x) \ |
803 | __print_symbolic(x, \ |
804 | { rpcrdma_noch, "inline" }, \ |
805 | { rpcrdma_noch_pullup, "pullup" }, \ |
806 | { rpcrdma_noch_mapped, "mapped" }, \ |
807 | { rpcrdma_readch, "read list" }, \ |
808 | { rpcrdma_areadch, "*read list" }, \ |
809 | { rpcrdma_writech, "write list" }, \ |
810 | { rpcrdma_replych, "reply chunk" }) |
811 | |
812 | TRACE_EVENT(xprtrdma_marshal, |
813 | TP_PROTO( |
814 | const struct rpcrdma_req *req, |
815 | unsigned int rtype, |
816 | unsigned int wtype |
817 | ), |
818 | |
819 | TP_ARGS(req, rtype, wtype), |
820 | |
821 | TP_STRUCT__entry( |
822 | __field(unsigned int, task_id) |
823 | __field(unsigned int, client_id) |
824 | __field(u32, xid) |
825 | __field(unsigned int, hdrlen) |
826 | __field(unsigned int, headlen) |
827 | __field(unsigned int, pagelen) |
828 | __field(unsigned int, taillen) |
829 | __field(unsigned int, rtype) |
830 | __field(unsigned int, wtype) |
831 | ), |
832 | |
833 | TP_fast_assign( |
834 | const struct rpc_rqst *rqst = &req->rl_slot; |
835 | |
836 | __entry->task_id = rqst->rq_task->tk_pid; |
837 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
838 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
839 | __entry->hdrlen = req->rl_hdrbuf.len; |
840 | __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; |
841 | __entry->pagelen = rqst->rq_snd_buf.page_len; |
842 | __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; |
843 | __entry->rtype = rtype; |
844 | __entry->wtype = wtype; |
845 | ), |
846 | |
847 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER |
848 | " xid=0x%08x hdr=%u xdr=%u/%u/%u %s/%s", |
849 | __entry->task_id, __entry->client_id, __entry->xid, |
850 | __entry->hdrlen, |
851 | __entry->headlen, __entry->pagelen, __entry->taillen, |
852 | xprtrdma_show_chunktype(__entry->rtype), |
853 | xprtrdma_show_chunktype(__entry->wtype) |
854 | ) |
855 | ); |
856 | |
857 | TRACE_EVENT(xprtrdma_marshal_failed, |
858 | TP_PROTO(const struct rpc_rqst *rqst, |
859 | int ret |
860 | ), |
861 | |
862 | TP_ARGS(rqst, ret), |
863 | |
864 | TP_STRUCT__entry( |
865 | __field(unsigned int, task_id) |
866 | __field(unsigned int, client_id) |
867 | __field(u32, xid) |
868 | __field(int, ret) |
869 | ), |
870 | |
871 | TP_fast_assign( |
872 | __entry->task_id = rqst->rq_task->tk_pid; |
873 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
874 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
875 | __entry->ret = ret; |
876 | ), |
877 | |
878 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x ret=%d", |
879 | __entry->task_id, __entry->client_id, __entry->xid, |
880 | __entry->ret |
881 | ) |
882 | ); |
883 | |
884 | TRACE_EVENT(xprtrdma_prepsend_failed, |
885 | TP_PROTO(const struct rpc_rqst *rqst, |
886 | int ret |
887 | ), |
888 | |
889 | TP_ARGS(rqst, ret), |
890 | |
891 | TP_STRUCT__entry( |
892 | __field(unsigned int, task_id) |
893 | __field(unsigned int, client_id) |
894 | __field(u32, xid) |
895 | __field(int, ret) |
896 | ), |
897 | |
898 | TP_fast_assign( |
899 | __entry->task_id = rqst->rq_task->tk_pid; |
900 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
901 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
902 | __entry->ret = ret; |
903 | ), |
904 | |
905 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x ret=%d", |
906 | __entry->task_id, __entry->client_id, __entry->xid, |
907 | __entry->ret |
908 | ) |
909 | ); |
910 | |
911 | TRACE_EVENT(xprtrdma_post_send, |
912 | TP_PROTO( |
913 | const struct rpcrdma_req *req |
914 | ), |
915 | |
916 | TP_ARGS(req), |
917 | |
918 | TP_STRUCT__entry( |
919 | __field(u32, cq_id) |
920 | __field(int, completion_id) |
921 | __field(unsigned int, task_id) |
922 | __field(unsigned int, client_id) |
923 | __field(int, num_sge) |
924 | __field(int, signaled) |
925 | ), |
926 | |
927 | TP_fast_assign( |
928 | const struct rpc_rqst *rqst = &req->rl_slot; |
929 | const struct rpcrdma_sendctx *sc = req->rl_sendctx; |
930 | |
931 | __entry->cq_id = sc->sc_cid.ci_queue_id; |
932 | __entry->completion_id = sc->sc_cid.ci_completion_id; |
933 | __entry->task_id = rqst->rq_task->tk_pid; |
934 | __entry->client_id = rqst->rq_task->tk_client ? |
935 | rqst->rq_task->tk_client->cl_clid : -1; |
936 | __entry->num_sge = req->rl_wr.num_sge; |
937 | __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; |
938 | ), |
939 | |
940 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " cq.id=%u cid=%d (%d SGE%s) %s", |
941 | __entry->task_id, __entry->client_id, |
942 | __entry->cq_id, __entry->completion_id, |
943 | __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), |
944 | (__entry->signaled ? "signaled" : "") |
945 | ) |
946 | ); |
947 | |
948 | TRACE_EVENT(xprtrdma_post_send_err, |
949 | TP_PROTO( |
950 | const struct rpcrdma_xprt *r_xprt, |
951 | const struct rpcrdma_req *req, |
952 | int rc |
953 | ), |
954 | |
955 | TP_ARGS(r_xprt, req, rc), |
956 | |
957 | TP_STRUCT__entry( |
958 | __field(u32, cq_id) |
959 | __field(unsigned int, task_id) |
960 | __field(unsigned int, client_id) |
961 | __field(int, rc) |
962 | ), |
963 | |
964 | TP_fast_assign( |
965 | const struct rpc_rqst *rqst = &req->rl_slot; |
966 | const struct rpcrdma_ep *ep = r_xprt->rx_ep; |
967 | |
968 | __entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0; |
969 | __entry->task_id = rqst->rq_task->tk_pid; |
970 | __entry->client_id = rqst->rq_task->tk_client ? |
971 | rqst->rq_task->tk_client->cl_clid : -1; |
972 | __entry->rc = rc; |
973 | ), |
974 | |
975 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " cq.id=%u rc=%d", |
976 | __entry->task_id, __entry->client_id, |
977 | __entry->cq_id, __entry->rc |
978 | ) |
979 | ); |
980 | |
981 | TRACE_EVENT(xprtrdma_post_recv, |
982 | TP_PROTO( |
983 | const struct rpcrdma_rep *rep |
984 | ), |
985 | |
986 | TP_ARGS(rep), |
987 | |
988 | TP_STRUCT__entry( |
989 | __field(u32, cq_id) |
990 | __field(int, completion_id) |
991 | ), |
992 | |
993 | TP_fast_assign( |
994 | __entry->cq_id = rep->rr_cid.ci_queue_id; |
995 | __entry->completion_id = rep->rr_cid.ci_completion_id; |
996 | ), |
997 | |
998 | TP_printk("cq.id=%d cid=%d", |
999 | __entry->cq_id, __entry->completion_id |
1000 | ) |
1001 | ); |
1002 | |
1003 | TRACE_EVENT(xprtrdma_post_recvs, |
1004 | TP_PROTO( |
1005 | const struct rpcrdma_xprt *r_xprt, |
1006 | unsigned int count |
1007 | ), |
1008 | |
1009 | TP_ARGS(r_xprt, count), |
1010 | |
1011 | TP_STRUCT__entry( |
1012 | __field(u32, cq_id) |
1013 | __field(unsigned int, count) |
1014 | __field(int, posted) |
1015 | __string(addr, rpcrdma_addrstr(r_xprt)) |
1016 | __string(port, rpcrdma_portstr(r_xprt)) |
1017 | ), |
1018 | |
1019 | TP_fast_assign( |
1020 | const struct rpcrdma_ep *ep = r_xprt->rx_ep; |
1021 | |
1022 | __entry->cq_id = ep->re_attr.recv_cq->res.id; |
1023 | __entry->count = count; |
1024 | __entry->posted = ep->re_receive_count; |
1025 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
1026 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
1027 | ), |
1028 | |
1029 | TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active", |
1030 | __get_str(addr), __get_str(port), __entry->cq_id, |
1031 | __entry->count, __entry->posted |
1032 | ) |
1033 | ); |
1034 | |
1035 | TRACE_EVENT(xprtrdma_post_recvs_err, |
1036 | TP_PROTO( |
1037 | const struct rpcrdma_xprt *r_xprt, |
1038 | int status |
1039 | ), |
1040 | |
1041 | TP_ARGS(r_xprt, status), |
1042 | |
1043 | TP_STRUCT__entry( |
1044 | __field(u32, cq_id) |
1045 | __field(int, status) |
1046 | __string(addr, rpcrdma_addrstr(r_xprt)) |
1047 | __string(port, rpcrdma_portstr(r_xprt)) |
1048 | ), |
1049 | |
1050 | TP_fast_assign( |
1051 | const struct rpcrdma_ep *ep = r_xprt->rx_ep; |
1052 | |
1053 | __entry->cq_id = ep->re_attr.recv_cq->res.id; |
1054 | __entry->status = status; |
1055 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
1056 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
1057 | ), |
1058 | |
1059 | TP_printk("peer=[%s]:%s cq.id=%d rc=%d", |
1060 | __get_str(addr), __get_str(port), __entry->cq_id, |
1061 | __entry->status |
1062 | ) |
1063 | ); |
1064 | |
1065 | TRACE_EVENT(xprtrdma_post_linv_err, |
1066 | TP_PROTO( |
1067 | const struct rpcrdma_req *req, |
1068 | int status |
1069 | ), |
1070 | |
1071 | TP_ARGS(req, status), |
1072 | |
1073 | TP_STRUCT__entry( |
1074 | __field(unsigned int, task_id) |
1075 | __field(unsigned int, client_id) |
1076 | __field(int, status) |
1077 | ), |
1078 | |
1079 | TP_fast_assign( |
1080 | const struct rpc_task *task = req->rl_slot.rq_task; |
1081 | |
1082 | __entry->task_id = task->tk_pid; |
1083 | __entry->client_id = task->tk_client->cl_clid; |
1084 | __entry->status = status; |
1085 | ), |
1086 | |
1087 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d", |
1088 | __entry->task_id, __entry->client_id, __entry->status |
1089 | ) |
1090 | ); |
1091 | |
1092 | /** |
1093 | ** Completion events |
1094 | **/ |
1095 | |
1096 | DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); |
1097 | |
1098 | DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); |
1099 | DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg); |
1100 | DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li); |
1101 | DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake); |
1102 | DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done); |
1103 | |
1104 | TRACE_EVENT(xprtrdma_frwr_alloc, |
1105 | TP_PROTO( |
1106 | const struct rpcrdma_mr *mr, |
1107 | int rc |
1108 | ), |
1109 | |
1110 | TP_ARGS(mr, rc), |
1111 | |
1112 | TP_STRUCT__entry( |
1113 | __field(u32, mr_id) |
1114 | __field(int, rc) |
1115 | ), |
1116 | |
1117 | TP_fast_assign( |
1118 | __entry->mr_id = mr->mr_ibmr->res.id; |
1119 | __entry->rc = rc; |
1120 | ), |
1121 | |
1122 | TP_printk("mr.id=%u: rc=%d", |
1123 | __entry->mr_id, __entry->rc |
1124 | ) |
1125 | ); |
1126 | |
1127 | TRACE_EVENT(xprtrdma_frwr_dereg, |
1128 | TP_PROTO( |
1129 | const struct rpcrdma_mr *mr, |
1130 | int rc |
1131 | ), |
1132 | |
1133 | TP_ARGS(mr, rc), |
1134 | |
1135 | TP_STRUCT__entry( |
1136 | __field(u32, mr_id) |
1137 | __field(int, nents) |
1138 | __field(u32, handle) |
1139 | __field(u32, length) |
1140 | __field(u64, offset) |
1141 | __field(u32, dir) |
1142 | __field(int, rc) |
1143 | ), |
1144 | |
1145 | TP_fast_assign( |
1146 | __entry->mr_id = mr->mr_ibmr->res.id; |
1147 | __entry->nents = mr->mr_nents; |
1148 | __entry->handle = mr->mr_handle; |
1149 | __entry->length = mr->mr_length; |
1150 | __entry->offset = mr->mr_offset; |
1151 | __entry->dir = mr->mr_dir; |
1152 | __entry->rc = rc; |
1153 | ), |
1154 | |
1155 | TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", |
1156 | __entry->mr_id, __entry->nents, __entry->length, |
1157 | (unsigned long long)__entry->offset, __entry->handle, |
1158 | xprtrdma_show_direction(__entry->dir), |
1159 | __entry->rc |
1160 | ) |
1161 | ); |
1162 | |
1163 | TRACE_EVENT(xprtrdma_frwr_sgerr, |
1164 | TP_PROTO( |
1165 | const struct rpcrdma_mr *mr, |
1166 | int sg_nents |
1167 | ), |
1168 | |
1169 | TP_ARGS(mr, sg_nents), |
1170 | |
1171 | TP_STRUCT__entry( |
1172 | __field(u32, mr_id) |
1173 | __field(u64, addr) |
1174 | __field(u32, dir) |
1175 | __field(int, nents) |
1176 | ), |
1177 | |
1178 | TP_fast_assign( |
1179 | __entry->mr_id = mr->mr_ibmr->res.id; |
1180 | __entry->addr = mr->mr_sg->dma_address; |
1181 | __entry->dir = mr->mr_dir; |
1182 | __entry->nents = sg_nents; |
1183 | ), |
1184 | |
1185 | TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", |
1186 | __entry->mr_id, __entry->addr, |
1187 | xprtrdma_show_direction(__entry->dir), |
1188 | __entry->nents |
1189 | ) |
1190 | ); |
1191 | |
1192 | TRACE_EVENT(xprtrdma_frwr_maperr, |
1193 | TP_PROTO( |
1194 | const struct rpcrdma_mr *mr, |
1195 | int num_mapped |
1196 | ), |
1197 | |
1198 | TP_ARGS(mr, num_mapped), |
1199 | |
1200 | TP_STRUCT__entry( |
1201 | __field(u32, mr_id) |
1202 | __field(u64, addr) |
1203 | __field(u32, dir) |
1204 | __field(int, num_mapped) |
1205 | __field(int, nents) |
1206 | ), |
1207 | |
1208 | TP_fast_assign( |
1209 | __entry->mr_id = mr->mr_ibmr->res.id; |
1210 | __entry->addr = mr->mr_sg->dma_address; |
1211 | __entry->dir = mr->mr_dir; |
1212 | __entry->num_mapped = num_mapped; |
1213 | __entry->nents = mr->mr_nents; |
1214 | ), |
1215 | |
1216 | TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", |
1217 | __entry->mr_id, __entry->addr, |
1218 | xprtrdma_show_direction(__entry->dir), |
1219 | __entry->num_mapped, __entry->nents |
1220 | ) |
1221 | ); |
1222 | |
1223 | DEFINE_MR_EVENT(fastreg); |
1224 | DEFINE_MR_EVENT(localinv); |
1225 | DEFINE_MR_EVENT(reminv); |
1226 | DEFINE_MR_EVENT(map); |
1227 | |
1228 | DEFINE_ANON_MR_EVENT(unmap); |
1229 | |
1230 | TRACE_EVENT(xprtrdma_dma_maperr, |
1231 | TP_PROTO( |
1232 | u64 addr |
1233 | ), |
1234 | |
1235 | TP_ARGS(addr), |
1236 | |
1237 | TP_STRUCT__entry( |
1238 | __field(u64, addr) |
1239 | ), |
1240 | |
1241 | TP_fast_assign( |
1242 | __entry->addr = addr; |
1243 | ), |
1244 | |
1245 | TP_printk("dma addr=0x%llx\n", __entry->addr) |
1246 | ); |
1247 | |
1248 | /** |
1249 | ** Reply events |
1250 | **/ |
1251 | |
1252 | TRACE_EVENT(xprtrdma_reply, |
1253 | TP_PROTO( |
1254 | const struct rpc_task *task, |
1255 | const struct rpcrdma_rep *rep, |
1256 | unsigned int credits |
1257 | ), |
1258 | |
1259 | TP_ARGS(task, rep, credits), |
1260 | |
1261 | TP_STRUCT__entry( |
1262 | __field(unsigned int, task_id) |
1263 | __field(unsigned int, client_id) |
1264 | __field(u32, xid) |
1265 | __field(unsigned int, credits) |
1266 | ), |
1267 | |
1268 | TP_fast_assign( |
1269 | __entry->task_id = task->tk_pid; |
1270 | __entry->client_id = task->tk_client->cl_clid; |
1271 | __entry->xid = be32_to_cpu(rep->rr_xid); |
1272 | __entry->credits = credits; |
1273 | ), |
1274 | |
1275 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x credits=%u", |
1276 | __entry->task_id, __entry->client_id, __entry->xid, |
1277 | __entry->credits |
1278 | ) |
1279 | ); |
1280 | |
1281 | DEFINE_REPLY_EVENT(vers); |
1282 | DEFINE_REPLY_EVENT(rqst); |
1283 | DEFINE_REPLY_EVENT(short); |
1284 | DEFINE_REPLY_EVENT(hdr); |
1285 | |
1286 | TRACE_EVENT(xprtrdma_err_vers, |
1287 | TP_PROTO( |
1288 | const struct rpc_rqst *rqst, |
1289 | __be32 *min, |
1290 | __be32 *max |
1291 | ), |
1292 | |
1293 | TP_ARGS(rqst, min, max), |
1294 | |
1295 | TP_STRUCT__entry( |
1296 | __field(unsigned int, task_id) |
1297 | __field(unsigned int, client_id) |
1298 | __field(u32, xid) |
1299 | __field(u32, min) |
1300 | __field(u32, max) |
1301 | ), |
1302 | |
1303 | TP_fast_assign( |
1304 | __entry->task_id = rqst->rq_task->tk_pid; |
1305 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
1306 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
1307 | __entry->min = be32_to_cpup(min); |
1308 | __entry->max = be32_to_cpup(max); |
1309 | ), |
1310 | |
1311 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x versions=[%u, %u]", |
1312 | __entry->task_id, __entry->client_id, __entry->xid, |
1313 | __entry->min, __entry->max |
1314 | ) |
1315 | ); |
1316 | |
1317 | TRACE_EVENT(xprtrdma_err_chunk, |
1318 | TP_PROTO( |
1319 | const struct rpc_rqst *rqst |
1320 | ), |
1321 | |
1322 | TP_ARGS(rqst), |
1323 | |
1324 | TP_STRUCT__entry( |
1325 | __field(unsigned int, task_id) |
1326 | __field(unsigned int, client_id) |
1327 | __field(u32, xid) |
1328 | ), |
1329 | |
1330 | TP_fast_assign( |
1331 | __entry->task_id = rqst->rq_task->tk_pid; |
1332 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
1333 | __entry->xid = be32_to_cpu(rqst->rq_xid); |
1334 | ), |
1335 | |
1336 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x", |
1337 | __entry->task_id, __entry->client_id, __entry->xid |
1338 | ) |
1339 | ); |
1340 | |
1341 | TRACE_EVENT(xprtrdma_err_unrecognized, |
1342 | TP_PROTO( |
1343 | const struct rpc_rqst *rqst, |
1344 | __be32 *procedure |
1345 | ), |
1346 | |
1347 | TP_ARGS(rqst, procedure), |
1348 | |
1349 | TP_STRUCT__entry( |
1350 | __field(unsigned int, task_id) |
1351 | __field(unsigned int, client_id) |
1352 | __field(u32, xid) |
1353 | __field(u32, procedure) |
1354 | ), |
1355 | |
1356 | TP_fast_assign( |
1357 | __entry->task_id = rqst->rq_task->tk_pid; |
1358 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
1359 | __entry->procedure = be32_to_cpup(procedure); |
1360 | ), |
1361 | |
1362 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x procedure=%u", |
1363 | __entry->task_id, __entry->client_id, __entry->xid, |
1364 | __entry->procedure |
1365 | ) |
1366 | ); |
1367 | |
1368 | TRACE_EVENT(xprtrdma_fixup, |
1369 | TP_PROTO( |
1370 | const struct rpc_rqst *rqst, |
1371 | unsigned long fixup |
1372 | ), |
1373 | |
1374 | TP_ARGS(rqst, fixup), |
1375 | |
1376 | TP_STRUCT__entry( |
1377 | __field(unsigned int, task_id) |
1378 | __field(unsigned int, client_id) |
1379 | __field(unsigned long, fixup) |
1380 | __field(size_t, headlen) |
1381 | __field(unsigned int, pagelen) |
1382 | __field(size_t, taillen) |
1383 | ), |
1384 | |
1385 | TP_fast_assign( |
1386 | __entry->task_id = rqst->rq_task->tk_pid; |
1387 | __entry->client_id = rqst->rq_task->tk_client->cl_clid; |
1388 | __entry->fixup = fixup; |
1389 | __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; |
1390 | __entry->pagelen = rqst->rq_rcv_buf.page_len; |
1391 | __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; |
1392 | ), |
1393 | |
1394 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " fixup=%lu xdr=%zu/%u/%zu", |
1395 | __entry->task_id, __entry->client_id, __entry->fixup, |
1396 | __entry->headlen, __entry->pagelen, __entry->taillen |
1397 | ) |
1398 | ); |
1399 | |
1400 | TRACE_EVENT(xprtrdma_decode_seg, |
1401 | TP_PROTO( |
1402 | u32 handle, |
1403 | u32 length, |
1404 | u64 offset |
1405 | ), |
1406 | |
1407 | TP_ARGS(handle, length, offset), |
1408 | |
1409 | TP_STRUCT__entry( |
1410 | __field(u32, handle) |
1411 | __field(u32, length) |
1412 | __field(u64, offset) |
1413 | ), |
1414 | |
1415 | TP_fast_assign( |
1416 | __entry->handle = handle; |
1417 | __entry->length = length; |
1418 | __entry->offset = offset; |
1419 | ), |
1420 | |
1421 | TP_printk("%u@0x%016llx:0x%08x", |
1422 | __entry->length, (unsigned long long)__entry->offset, |
1423 | __entry->handle |
1424 | ) |
1425 | ); |
1426 | |
1427 | TRACE_EVENT(xprtrdma_mrs_zap, |
1428 | TP_PROTO( |
1429 | const struct rpc_task *task |
1430 | ), |
1431 | |
1432 | TP_ARGS(task), |
1433 | |
1434 | TP_STRUCT__entry( |
1435 | __field(unsigned int, task_id) |
1436 | __field(unsigned int, client_id) |
1437 | ), |
1438 | |
1439 | TP_fast_assign( |
1440 | __entry->task_id = task->tk_pid; |
1441 | __entry->client_id = task->tk_client->cl_clid; |
1442 | ), |
1443 | |
1444 | TP_printk(SUNRPC_TRACE_TASK_SPECIFIER, |
1445 | __entry->task_id, __entry->client_id |
1446 | ) |
1447 | ); |
1448 | |
1449 | /** |
1450 | ** Callback events |
1451 | **/ |
1452 | |
1453 | TRACE_EVENT(xprtrdma_cb_setup, |
1454 | TP_PROTO( |
1455 | const struct rpcrdma_xprt *r_xprt, |
1456 | unsigned int reqs |
1457 | ), |
1458 | |
1459 | TP_ARGS(r_xprt, reqs), |
1460 | |
1461 | TP_STRUCT__entry( |
1462 | __field(unsigned int, reqs) |
1463 | __string(addr, rpcrdma_addrstr(r_xprt)) |
1464 | __string(port, rpcrdma_portstr(r_xprt)) |
1465 | ), |
1466 | |
1467 | TP_fast_assign( |
1468 | __entry->reqs = reqs; |
1469 | __assign_str(addr, rpcrdma_addrstr(r_xprt)); |
1470 | __assign_str(port, rpcrdma_portstr(r_xprt)); |
1471 | ), |
1472 | |
1473 | TP_printk("peer=[%s]:%s %u reqs", |
1474 | __get_str(addr), __get_str(port), __entry->reqs |
1475 | ) |
1476 | ); |
1477 | |
1478 | DEFINE_CALLBACK_EVENT(call); |
1479 | DEFINE_CALLBACK_EVENT(reply); |
1480 | |
1481 | /** |
1482 | ** Server-side RPC/RDMA events |
1483 | **/ |
1484 | |
1485 | DECLARE_EVENT_CLASS(svcrdma_accept_class, |
1486 | TP_PROTO( |
1487 | const struct svcxprt_rdma *rdma, |
1488 | long status |
1489 | ), |
1490 | |
1491 | TP_ARGS(rdma, status), |
1492 | |
1493 | TP_STRUCT__entry( |
1494 | __field(long, status) |
1495 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1496 | ), |
1497 | |
1498 | TP_fast_assign( |
1499 | __entry->status = status; |
1500 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1501 | ), |
1502 | |
1503 | TP_printk("addr=%s status=%ld", |
1504 | __get_str(addr), __entry->status |
1505 | ) |
1506 | ); |
1507 | |
1508 | #define DEFINE_ACCEPT_EVENT(name) \ |
1509 | DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ |
1510 | TP_PROTO( \ |
1511 | const struct svcxprt_rdma *rdma, \ |
1512 | long status \ |
1513 | ), \ |
1514 | TP_ARGS(rdma, status)) |
1515 | |
1516 | DEFINE_ACCEPT_EVENT(pd); |
1517 | DEFINE_ACCEPT_EVENT(qp); |
1518 | DEFINE_ACCEPT_EVENT(fabric); |
1519 | DEFINE_ACCEPT_EVENT(initdepth); |
1520 | DEFINE_ACCEPT_EVENT(accept); |
1521 | |
1522 | TRACE_DEFINE_ENUM(RDMA_MSG); |
1523 | TRACE_DEFINE_ENUM(RDMA_NOMSG); |
1524 | TRACE_DEFINE_ENUM(RDMA_MSGP); |
1525 | TRACE_DEFINE_ENUM(RDMA_DONE); |
1526 | TRACE_DEFINE_ENUM(RDMA_ERROR); |
1527 | |
1528 | #define show_rpcrdma_proc(x) \ |
1529 | __print_symbolic(x, \ |
1530 | { RDMA_MSG, "RDMA_MSG" }, \ |
1531 | { RDMA_NOMSG, "RDMA_NOMSG" }, \ |
1532 | { RDMA_MSGP, "RDMA_MSGP" }, \ |
1533 | { RDMA_DONE, "RDMA_DONE" }, \ |
1534 | { RDMA_ERROR, "RDMA_ERROR" }) |
1535 | |
1536 | TRACE_EVENT(svcrdma_decode_rqst, |
1537 | TP_PROTO( |
1538 | const struct svc_rdma_recv_ctxt *ctxt, |
1539 | __be32 *p, |
1540 | unsigned int hdrlen |
1541 | ), |
1542 | |
1543 | TP_ARGS(ctxt, p, hdrlen), |
1544 | |
1545 | TP_STRUCT__entry( |
1546 | __field(u32, cq_id) |
1547 | __field(int, completion_id) |
1548 | __field(u32, xid) |
1549 | __field(u32, vers) |
1550 | __field(u32, proc) |
1551 | __field(u32, credits) |
1552 | __field(unsigned int, hdrlen) |
1553 | ), |
1554 | |
1555 | TP_fast_assign( |
1556 | __entry->cq_id = ctxt->rc_cid.ci_queue_id; |
1557 | __entry->completion_id = ctxt->rc_cid.ci_completion_id; |
1558 | __entry->xid = be32_to_cpup(p++); |
1559 | __entry->vers = be32_to_cpup(p++); |
1560 | __entry->credits = be32_to_cpup(p++); |
1561 | __entry->proc = be32_to_cpup(p); |
1562 | __entry->hdrlen = hdrlen; |
1563 | ), |
1564 | |
1565 | TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", |
1566 | __entry->cq_id, __entry->completion_id, |
1567 | __entry->xid, __entry->vers, __entry->credits, |
1568 | show_rpcrdma_proc(__entry->proc), __entry->hdrlen) |
1569 | ); |
1570 | |
1571 | TRACE_EVENT(svcrdma_decode_short_err, |
1572 | TP_PROTO( |
1573 | const struct svc_rdma_recv_ctxt *ctxt, |
1574 | unsigned int hdrlen |
1575 | ), |
1576 | |
1577 | TP_ARGS(ctxt, hdrlen), |
1578 | |
1579 | TP_STRUCT__entry( |
1580 | __field(u32, cq_id) |
1581 | __field(int, completion_id) |
1582 | __field(unsigned int, hdrlen) |
1583 | ), |
1584 | |
1585 | TP_fast_assign( |
1586 | __entry->cq_id = ctxt->rc_cid.ci_queue_id; |
1587 | __entry->completion_id = ctxt->rc_cid.ci_completion_id; |
1588 | __entry->hdrlen = hdrlen; |
1589 | ), |
1590 | |
1591 | TP_printk("cq.id=%u cid=%d hdrlen=%u", |
1592 | __entry->cq_id, __entry->completion_id, |
1593 | __entry->hdrlen) |
1594 | ); |
1595 | |
1596 | DECLARE_EVENT_CLASS(svcrdma_badreq_event, |
1597 | TP_PROTO( |
1598 | const struct svc_rdma_recv_ctxt *ctxt, |
1599 | __be32 *p |
1600 | ), |
1601 | |
1602 | TP_ARGS(ctxt, p), |
1603 | |
1604 | TP_STRUCT__entry( |
1605 | __field(u32, cq_id) |
1606 | __field(int, completion_id) |
1607 | __field(u32, xid) |
1608 | __field(u32, vers) |
1609 | __field(u32, proc) |
1610 | __field(u32, credits) |
1611 | ), |
1612 | |
1613 | TP_fast_assign( |
1614 | __entry->cq_id = ctxt->rc_cid.ci_queue_id; |
1615 | __entry->completion_id = ctxt->rc_cid.ci_completion_id; |
1616 | __entry->xid = be32_to_cpup(p++); |
1617 | __entry->vers = be32_to_cpup(p++); |
1618 | __entry->credits = be32_to_cpup(p++); |
1619 | __entry->proc = be32_to_cpup(p); |
1620 | ), |
1621 | |
1622 | TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", |
1623 | __entry->cq_id, __entry->completion_id, |
1624 | __entry->xid, __entry->vers, __entry->credits, __entry->proc) |
1625 | ); |
1626 | |
1627 | #define DEFINE_BADREQ_EVENT(name) \ |
1628 | DEFINE_EVENT(svcrdma_badreq_event, \ |
1629 | svcrdma_decode_##name##_err, \ |
1630 | TP_PROTO( \ |
1631 | const struct svc_rdma_recv_ctxt *ctxt, \ |
1632 | __be32 *p \ |
1633 | ), \ |
1634 | TP_ARGS(ctxt, p)) |
1635 | |
1636 | DEFINE_BADREQ_EVENT(badvers); |
1637 | DEFINE_BADREQ_EVENT(drop); |
1638 | DEFINE_BADREQ_EVENT(badproc); |
1639 | DEFINE_BADREQ_EVENT(parse); |
1640 | |
1641 | TRACE_EVENT(svcrdma_encode_wseg, |
1642 | TP_PROTO( |
1643 | const struct svc_rdma_send_ctxt *ctxt, |
1644 | u32 segno, |
1645 | u32 handle, |
1646 | u32 length, |
1647 | u64 offset |
1648 | ), |
1649 | |
1650 | TP_ARGS(ctxt, segno, handle, length, offset), |
1651 | |
1652 | TP_STRUCT__entry( |
1653 | __field(u32, cq_id) |
1654 | __field(int, completion_id) |
1655 | __field(u32, segno) |
1656 | __field(u32, handle) |
1657 | __field(u32, length) |
1658 | __field(u64, offset) |
1659 | ), |
1660 | |
1661 | TP_fast_assign( |
1662 | __entry->cq_id = ctxt->sc_cid.ci_queue_id; |
1663 | __entry->completion_id = ctxt->sc_cid.ci_completion_id; |
1664 | __entry->segno = segno; |
1665 | __entry->handle = handle; |
1666 | __entry->length = length; |
1667 | __entry->offset = offset; |
1668 | ), |
1669 | |
1670 | TP_printk("cq.id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", |
1671 | __entry->cq_id, __entry->completion_id, |
1672 | __entry->segno, __entry->length, |
1673 | (unsigned long long)__entry->offset, __entry->handle |
1674 | ) |
1675 | ); |
1676 | |
1677 | TRACE_EVENT(svcrdma_decode_rseg, |
1678 | TP_PROTO( |
1679 | const struct rpc_rdma_cid *cid, |
1680 | const struct svc_rdma_chunk *chunk, |
1681 | const struct svc_rdma_segment *segment |
1682 | ), |
1683 | |
1684 | TP_ARGS(cid, chunk, segment), |
1685 | |
1686 | TP_STRUCT__entry( |
1687 | __field(u32, cq_id) |
1688 | __field(int, completion_id) |
1689 | __field(u32, segno) |
1690 | __field(u32, position) |
1691 | __field(u32, handle) |
1692 | __field(u32, length) |
1693 | __field(u64, offset) |
1694 | ), |
1695 | |
1696 | TP_fast_assign( |
1697 | __entry->cq_id = cid->ci_queue_id; |
1698 | __entry->completion_id = cid->ci_completion_id; |
1699 | __entry->segno = chunk->ch_segcount; |
1700 | __entry->position = chunk->ch_position; |
1701 | __entry->handle = segment->rs_handle; |
1702 | __entry->length = segment->rs_length; |
1703 | __entry->offset = segment->rs_offset; |
1704 | ), |
1705 | |
1706 | TP_printk("cq.id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", |
1707 | __entry->cq_id, __entry->completion_id, |
1708 | __entry->segno, __entry->position, __entry->length, |
1709 | (unsigned long long)__entry->offset, __entry->handle |
1710 | ) |
1711 | ); |
1712 | |
1713 | TRACE_EVENT(svcrdma_decode_wseg, |
1714 | TP_PROTO( |
1715 | const struct rpc_rdma_cid *cid, |
1716 | const struct svc_rdma_chunk *chunk, |
1717 | u32 segno |
1718 | ), |
1719 | |
1720 | TP_ARGS(cid, chunk, segno), |
1721 | |
1722 | TP_STRUCT__entry( |
1723 | __field(u32, cq_id) |
1724 | __field(int, completion_id) |
1725 | __field(u32, segno) |
1726 | __field(u32, handle) |
1727 | __field(u32, length) |
1728 | __field(u64, offset) |
1729 | ), |
1730 | |
1731 | TP_fast_assign( |
1732 | const struct svc_rdma_segment *segment = |
1733 | &chunk->ch_segments[segno]; |
1734 | |
1735 | __entry->cq_id = cid->ci_queue_id; |
1736 | __entry->completion_id = cid->ci_completion_id; |
1737 | __entry->segno = segno; |
1738 | __entry->handle = segment->rs_handle; |
1739 | __entry->length = segment->rs_length; |
1740 | __entry->offset = segment->rs_offset; |
1741 | ), |
1742 | |
1743 | TP_printk("cq.id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", |
1744 | __entry->cq_id, __entry->completion_id, |
1745 | __entry->segno, __entry->length, |
1746 | (unsigned long long)__entry->offset, __entry->handle |
1747 | ) |
1748 | ); |
1749 | |
1750 | DECLARE_EVENT_CLASS(svcrdma_error_event, |
1751 | TP_PROTO( |
1752 | __be32 xid |
1753 | ), |
1754 | |
1755 | TP_ARGS(xid), |
1756 | |
1757 | TP_STRUCT__entry( |
1758 | __field(u32, xid) |
1759 | ), |
1760 | |
1761 | TP_fast_assign( |
1762 | __entry->xid = be32_to_cpu(xid); |
1763 | ), |
1764 | |
1765 | TP_printk("xid=0x%08x", |
1766 | __entry->xid |
1767 | ) |
1768 | ); |
1769 | |
1770 | #define DEFINE_ERROR_EVENT(name) \ |
1771 | DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ |
1772 | TP_PROTO( \ |
1773 | __be32 xid \ |
1774 | ), \ |
1775 | TP_ARGS(xid)) |
1776 | |
1777 | DEFINE_ERROR_EVENT(vers); |
1778 | DEFINE_ERROR_EVENT(chunk); |
1779 | |
1780 | /** |
1781 | ** Server-side RDMA API events |
1782 | **/ |
1783 | |
1784 | DECLARE_EVENT_CLASS(svcrdma_dma_map_class, |
1785 | TP_PROTO( |
1786 | const struct svcxprt_rdma *rdma, |
1787 | u64 dma_addr, |
1788 | u32 length |
1789 | ), |
1790 | |
1791 | TP_ARGS(rdma, dma_addr, length), |
1792 | |
1793 | TP_STRUCT__entry( |
1794 | __field(u64, dma_addr) |
1795 | __field(u32, length) |
1796 | __string(device, rdma->sc_cm_id->device->name) |
1797 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1798 | ), |
1799 | |
1800 | TP_fast_assign( |
1801 | __entry->dma_addr = dma_addr; |
1802 | __entry->length = length; |
1803 | __assign_str(device, rdma->sc_cm_id->device->name); |
1804 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1805 | ), |
1806 | |
1807 | TP_printk("addr=%s device=%s dma_addr=%llu length=%u", |
1808 | __get_str(addr), __get_str(device), |
1809 | __entry->dma_addr, __entry->length |
1810 | ) |
1811 | ); |
1812 | |
1813 | #define DEFINE_SVC_DMA_EVENT(name) \ |
1814 | DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ |
1815 | TP_PROTO( \ |
1816 | const struct svcxprt_rdma *rdma,\ |
1817 | u64 dma_addr, \ |
1818 | u32 length \ |
1819 | ), \ |
1820 | TP_ARGS(rdma, dma_addr, length)) |
1821 | |
1822 | DEFINE_SVC_DMA_EVENT(dma_map_page); |
1823 | DEFINE_SVC_DMA_EVENT(dma_map_err); |
1824 | DEFINE_SVC_DMA_EVENT(dma_unmap_page); |
1825 | |
1826 | TRACE_EVENT(svcrdma_dma_map_rw_err, |
1827 | TP_PROTO( |
1828 | const struct svcxprt_rdma *rdma, |
1829 | unsigned int nents, |
1830 | int status |
1831 | ), |
1832 | |
1833 | TP_ARGS(rdma, nents, status), |
1834 | |
1835 | TP_STRUCT__entry( |
1836 | __field(int, status) |
1837 | __field(unsigned int, nents) |
1838 | __string(device, rdma->sc_cm_id->device->name) |
1839 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1840 | ), |
1841 | |
1842 | TP_fast_assign( |
1843 | __entry->status = status; |
1844 | __entry->nents = nents; |
1845 | __assign_str(device, rdma->sc_cm_id->device->name); |
1846 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1847 | ), |
1848 | |
1849 | TP_printk("addr=%s device=%s nents=%u status=%d", |
1850 | __get_str(addr), __get_str(device), __entry->nents, |
1851 | __entry->status |
1852 | ) |
1853 | ); |
1854 | |
1855 | TRACE_EVENT(svcrdma_no_rwctx_err, |
1856 | TP_PROTO( |
1857 | const struct svcxprt_rdma *rdma, |
1858 | unsigned int num_sges |
1859 | ), |
1860 | |
1861 | TP_ARGS(rdma, num_sges), |
1862 | |
1863 | TP_STRUCT__entry( |
1864 | __field(unsigned int, num_sges) |
1865 | __string(device, rdma->sc_cm_id->device->name) |
1866 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1867 | ), |
1868 | |
1869 | TP_fast_assign( |
1870 | __entry->num_sges = num_sges; |
1871 | __assign_str(device, rdma->sc_cm_id->device->name); |
1872 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1873 | ), |
1874 | |
1875 | TP_printk("addr=%s device=%s num_sges=%d", |
1876 | __get_str(addr), __get_str(device), __entry->num_sges |
1877 | ) |
1878 | ); |
1879 | |
1880 | TRACE_EVENT(svcrdma_page_overrun_err, |
1881 | TP_PROTO( |
1882 | const struct svcxprt_rdma *rdma, |
1883 | const struct svc_rqst *rqst, |
1884 | unsigned int pageno |
1885 | ), |
1886 | |
1887 | TP_ARGS(rdma, rqst, pageno), |
1888 | |
1889 | TP_STRUCT__entry( |
1890 | __field(unsigned int, pageno) |
1891 | __field(u32, xid) |
1892 | __string(device, rdma->sc_cm_id->device->name) |
1893 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1894 | ), |
1895 | |
1896 | TP_fast_assign( |
1897 | __entry->pageno = pageno; |
1898 | __entry->xid = __be32_to_cpu(rqst->rq_xid); |
1899 | __assign_str(device, rdma->sc_cm_id->device->name); |
1900 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1901 | ), |
1902 | |
1903 | TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), |
1904 | __get_str(device), __entry->xid, __entry->pageno |
1905 | ) |
1906 | ); |
1907 | |
1908 | TRACE_EVENT(svcrdma_small_wrch_err, |
1909 | TP_PROTO( |
1910 | const struct svcxprt_rdma *rdma, |
1911 | unsigned int remaining, |
1912 | unsigned int seg_no, |
1913 | unsigned int num_segs |
1914 | ), |
1915 | |
1916 | TP_ARGS(rdma, remaining, seg_no, num_segs), |
1917 | |
1918 | TP_STRUCT__entry( |
1919 | __field(unsigned int, remaining) |
1920 | __field(unsigned int, seg_no) |
1921 | __field(unsigned int, num_segs) |
1922 | __string(device, rdma->sc_cm_id->device->name) |
1923 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
1924 | ), |
1925 | |
1926 | TP_fast_assign( |
1927 | __entry->remaining = remaining; |
1928 | __entry->seg_no = seg_no; |
1929 | __entry->num_segs = num_segs; |
1930 | __assign_str(device, rdma->sc_cm_id->device->name); |
1931 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
1932 | ), |
1933 | |
1934 | TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", |
1935 | __get_str(addr), __get_str(device), __entry->remaining, |
1936 | __entry->seg_no, __entry->num_segs |
1937 | ) |
1938 | ); |
1939 | |
1940 | TRACE_EVENT(svcrdma_send_pullup, |
1941 | TP_PROTO( |
1942 | const struct svc_rdma_send_ctxt *ctxt, |
1943 | unsigned int msglen |
1944 | ), |
1945 | |
1946 | TP_ARGS(ctxt, msglen), |
1947 | |
1948 | TP_STRUCT__entry( |
1949 | __field(u32, cq_id) |
1950 | __field(int, completion_id) |
1951 | __field(unsigned int, hdrlen) |
1952 | __field(unsigned int, msglen) |
1953 | ), |
1954 | |
1955 | TP_fast_assign( |
1956 | __entry->cq_id = ctxt->sc_cid.ci_queue_id; |
1957 | __entry->completion_id = ctxt->sc_cid.ci_completion_id; |
1958 | __entry->hdrlen = ctxt->sc_hdrbuf.len, |
1959 | __entry->msglen = msglen; |
1960 | ), |
1961 | |
1962 | TP_printk("cq.id=%u cid=%d hdr=%u msg=%u (total %u)", |
1963 | __entry->cq_id, __entry->completion_id, |
1964 | __entry->hdrlen, __entry->msglen, |
1965 | __entry->hdrlen + __entry->msglen) |
1966 | ); |
1967 | |
1968 | TRACE_EVENT(svcrdma_send_err, |
1969 | TP_PROTO( |
1970 | const struct svc_rqst *rqst, |
1971 | int status |
1972 | ), |
1973 | |
1974 | TP_ARGS(rqst, status), |
1975 | |
1976 | TP_STRUCT__entry( |
1977 | __field(int, status) |
1978 | __field(u32, xid) |
1979 | __string(addr, rqst->rq_xprt->xpt_remotebuf) |
1980 | ), |
1981 | |
1982 | TP_fast_assign( |
1983 | __entry->status = status; |
1984 | __entry->xid = __be32_to_cpu(rqst->rq_xid); |
1985 | __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); |
1986 | ), |
1987 | |
1988 | TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), |
1989 | __entry->xid, __entry->status |
1990 | ) |
1991 | ); |
1992 | |
1993 | TRACE_EVENT(svcrdma_post_send, |
1994 | TP_PROTO( |
1995 | const struct svc_rdma_send_ctxt *ctxt |
1996 | ), |
1997 | |
1998 | TP_ARGS(ctxt), |
1999 | |
2000 | TP_STRUCT__entry( |
2001 | __field(u32, cq_id) |
2002 | __field(int, completion_id) |
2003 | __field(unsigned int, num_sge) |
2004 | __field(u32, inv_rkey) |
2005 | ), |
2006 | |
2007 | TP_fast_assign( |
2008 | const struct ib_send_wr *wr = &ctxt->sc_send_wr; |
2009 | |
2010 | __entry->cq_id = ctxt->sc_cid.ci_queue_id; |
2011 | __entry->completion_id = ctxt->sc_cid.ci_completion_id; |
2012 | __entry->num_sge = wr->num_sge; |
2013 | __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? |
2014 | wr->ex.invalidate_rkey : 0; |
2015 | ), |
2016 | |
2017 | TP_printk("cq.id=%u cid=%d num_sge=%u inv_rkey=0x%08x", |
2018 | __entry->cq_id, __entry->completion_id, |
2019 | __entry->num_sge, __entry->inv_rkey |
2020 | ) |
2021 | ); |
2022 | |
2023 | DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_send); |
2024 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_flush); |
2025 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_err); |
2026 | |
2027 | TRACE_EVENT(svcrdma_post_recv, |
2028 | TP_PROTO( |
2029 | const struct svc_rdma_recv_ctxt *ctxt |
2030 | ), |
2031 | |
2032 | TP_ARGS(ctxt), |
2033 | |
2034 | TP_STRUCT__entry( |
2035 | __field(u32, cq_id) |
2036 | __field(int, completion_id) |
2037 | ), |
2038 | |
2039 | TP_fast_assign( |
2040 | __entry->cq_id = ctxt->rc_cid.ci_queue_id; |
2041 | __entry->completion_id = ctxt->rc_cid.ci_completion_id; |
2042 | ), |
2043 | |
2044 | TP_printk("cq.id=%d cid=%d", |
2045 | __entry->cq_id, __entry->completion_id |
2046 | ) |
2047 | ); |
2048 | |
2049 | DEFINE_RECEIVE_SUCCESS_EVENT(svcrdma_wc_recv); |
2050 | DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_flush); |
2051 | DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_err); |
2052 | |
2053 | TRACE_EVENT(svcrdma_rq_post_err, |
2054 | TP_PROTO( |
2055 | const struct svcxprt_rdma *rdma, |
2056 | int status |
2057 | ), |
2058 | |
2059 | TP_ARGS(rdma, status), |
2060 | |
2061 | TP_STRUCT__entry( |
2062 | __field(int, status) |
2063 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
2064 | ), |
2065 | |
2066 | TP_fast_assign( |
2067 | __entry->status = status; |
2068 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
2069 | ), |
2070 | |
2071 | TP_printk("addr=%s status=%d", |
2072 | __get_str(addr), __entry->status |
2073 | ) |
2074 | ); |
2075 | |
2076 | DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, |
2077 | TP_PROTO( |
2078 | const struct rpc_rdma_cid *cid, |
2079 | int sqecount |
2080 | ), |
2081 | |
2082 | TP_ARGS(cid, sqecount), |
2083 | |
2084 | TP_STRUCT__entry( |
2085 | __field(u32, cq_id) |
2086 | __field(int, completion_id) |
2087 | __field(int, sqecount) |
2088 | ), |
2089 | |
2090 | TP_fast_assign( |
2091 | __entry->cq_id = cid->ci_queue_id; |
2092 | __entry->completion_id = cid->ci_completion_id; |
2093 | __entry->sqecount = sqecount; |
2094 | ), |
2095 | |
2096 | TP_printk("cq.id=%u cid=%d sqecount=%d", |
2097 | __entry->cq_id, __entry->completion_id, |
2098 | __entry->sqecount |
2099 | ) |
2100 | ); |
2101 | |
2102 | #define DEFINE_POST_CHUNK_EVENT(name) \ |
2103 | DEFINE_EVENT(svcrdma_post_chunk_class, \ |
2104 | svcrdma_post_##name##_chunk, \ |
2105 | TP_PROTO( \ |
2106 | const struct rpc_rdma_cid *cid, \ |
2107 | int sqecount \ |
2108 | ), \ |
2109 | TP_ARGS(cid, sqecount)) |
2110 | |
2111 | DEFINE_POST_CHUNK_EVENT(read); |
2112 | DEFINE_POST_CHUNK_EVENT(write); |
2113 | DEFINE_POST_CHUNK_EVENT(reply); |
2114 | |
2115 | DEFINE_EVENT(svcrdma_post_chunk_class, svcrdma_cc_release, |
2116 | TP_PROTO( |
2117 | const struct rpc_rdma_cid *cid, |
2118 | int sqecount |
2119 | ), |
2120 | TP_ARGS(cid, sqecount) |
2121 | ); |
2122 | |
2123 | TRACE_EVENT(svcrdma_wc_read, |
2124 | TP_PROTO( |
2125 | const struct ib_wc *wc, |
2126 | const struct rpc_rdma_cid *cid, |
2127 | unsigned int totalbytes, |
2128 | const ktime_t posttime |
2129 | ), |
2130 | |
2131 | TP_ARGS(wc, cid, totalbytes, posttime), |
2132 | |
2133 | TP_STRUCT__entry( |
2134 | __field(u32, cq_id) |
2135 | __field(int, completion_id) |
2136 | __field(s64, read_latency) |
2137 | __field(unsigned int, totalbytes) |
2138 | ), |
2139 | |
2140 | TP_fast_assign( |
2141 | __entry->cq_id = cid->ci_queue_id; |
2142 | __entry->completion_id = cid->ci_completion_id; |
2143 | __entry->totalbytes = totalbytes; |
2144 | __entry->read_latency = ktime_us_delta(ktime_get(), posttime); |
2145 | ), |
2146 | |
2147 | TP_printk("cq.id=%u cid=%d totalbytes=%u latency-us=%lld", |
2148 | __entry->cq_id, __entry->completion_id, |
2149 | __entry->totalbytes, __entry->read_latency |
2150 | ) |
2151 | ); |
2152 | |
2153 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_flush); |
2154 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_err); |
2155 | |
2156 | DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_write); |
2157 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_flush); |
2158 | DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_err); |
2159 | |
2160 | TRACE_EVENT(svcrdma_qp_error, |
2161 | TP_PROTO( |
2162 | const struct ib_event *event, |
2163 | const struct sockaddr *sap |
2164 | ), |
2165 | |
2166 | TP_ARGS(event, sap), |
2167 | |
2168 | TP_STRUCT__entry( |
2169 | __field(unsigned int, event) |
2170 | __string(device, event->device->name) |
2171 | __array(__u8, addr, INET6_ADDRSTRLEN + 10) |
2172 | ), |
2173 | |
2174 | TP_fast_assign( |
2175 | __entry->event = event->event; |
2176 | __assign_str(device, event->device->name); |
2177 | snprintf(__entry->addr, sizeof(__entry->addr) - 1, |
2178 | "%pISpc", sap); |
2179 | ), |
2180 | |
2181 | TP_printk("addr=%s dev=%s event=%s (%u)", |
2182 | __entry->addr, __get_str(device), |
2183 | rdma_show_ib_event(__entry->event), __entry->event |
2184 | ) |
2185 | ); |
2186 | |
2187 | DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, |
2188 | TP_PROTO( |
2189 | const struct svcxprt_rdma *rdma |
2190 | ), |
2191 | |
2192 | TP_ARGS(rdma), |
2193 | |
2194 | TP_STRUCT__entry( |
2195 | __field(int, avail) |
2196 | __field(int, depth) |
2197 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
2198 | ), |
2199 | |
2200 | TP_fast_assign( |
2201 | __entry->avail = atomic_read(&rdma->sc_sq_avail); |
2202 | __entry->depth = rdma->sc_sq_depth; |
2203 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
2204 | ), |
2205 | |
2206 | TP_printk("addr=%s sc_sq_avail=%d/%d", |
2207 | __get_str(addr), __entry->avail, __entry->depth |
2208 | ) |
2209 | ); |
2210 | |
2211 | #define DEFINE_SQ_EVENT(name) \ |
2212 | DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ |
2213 | TP_PROTO( \ |
2214 | const struct svcxprt_rdma *rdma \ |
2215 | ), \ |
2216 | TP_ARGS(rdma)) |
2217 | |
2218 | DEFINE_SQ_EVENT(full); |
2219 | DEFINE_SQ_EVENT(retry); |
2220 | |
2221 | TRACE_EVENT(svcrdma_sq_post_err, |
2222 | TP_PROTO( |
2223 | const struct svcxprt_rdma *rdma, |
2224 | int status |
2225 | ), |
2226 | |
2227 | TP_ARGS(rdma, status), |
2228 | |
2229 | TP_STRUCT__entry( |
2230 | __field(int, avail) |
2231 | __field(int, depth) |
2232 | __field(int, status) |
2233 | __string(addr, rdma->sc_xprt.xpt_remotebuf) |
2234 | ), |
2235 | |
2236 | TP_fast_assign( |
2237 | __entry->avail = atomic_read(&rdma->sc_sq_avail); |
2238 | __entry->depth = rdma->sc_sq_depth; |
2239 | __entry->status = status; |
2240 | __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); |
2241 | ), |
2242 | |
2243 | TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", |
2244 | __get_str(addr), __entry->avail, __entry->depth, |
2245 | __entry->status |
2246 | ) |
2247 | ); |
2248 | |
2249 | #endif /* _TRACE_RPCRDMA_H */ |
2250 | |
2251 | #include <trace/define_trace.h> |
2252 |
Warning: This file is not a C or C++ file. It does not have highlighting.