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