linux/include/trace/events/rpcrdma.h
<<
>>
Prefs
   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
  23DECLARE_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
  63DECLARE_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
 100DECLARE_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
 131DECLARE_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
 169DECLARE_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
 219DECLARE_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
 265TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
 266TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
 267TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
 268TRACE_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
 277DECLARE_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
 325DECLARE_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
 365DECLARE_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
 403TRACE_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
 439DEFINE_CONN_EVENT(connect);
 440DEFINE_CONN_EVENT(disconnect);
 441
 442DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
 443
 444TRACE_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
 473TRACE_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
 504TRACE_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
 540TRACE_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
 568TRACE_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
 598DEFINE_RDCH_EVENT(read);
 599DEFINE_WRCH_EVENT(write);
 600DEFINE_WRCH_EVENT(reply);
 601
 602TRACE_DEFINE_ENUM(rpcrdma_noch);
 603TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
 604TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
 605TRACE_DEFINE_ENUM(rpcrdma_readch);
 606TRACE_DEFINE_ENUM(rpcrdma_areadch);
 607TRACE_DEFINE_ENUM(rpcrdma_writech);
 608TRACE_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
 620TRACE_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
 664TRACE_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
 691TRACE_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
 718TRACE_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
 755TRACE_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
 777TRACE_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
 810TRACE_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
 841DEFINE_COMPLETION_EVENT(xprtrdma_wc_receive);
 842DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
 843DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg);
 844DEFINE_COMPLETION_EVENT(xprtrdma_wc_li);
 845DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake);
 846DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done);
 847
 848TRACE_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
 871TRACE_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
 907TRACE_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
 936TRACE_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
 967DEFINE_MR_EVENT(localinv);
 968DEFINE_MR_EVENT(map);
 969
 970DEFINE_ANON_MR_EVENT(unmap);
 971DEFINE_ANON_MR_EVENT(recycle);
 972
 973TRACE_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
 995TRACE_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
1024DEFINE_REPLY_EVENT(vers);
1025DEFINE_REPLY_EVENT(rqst);
1026DEFINE_REPLY_EVENT(short);
1027DEFINE_REPLY_EVENT(hdr);
1028
1029TRACE_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
1060TRACE_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
1084TRACE_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
1111TRACE_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
1143TRACE_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
1170TRACE_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
1196TRACE_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
1224DEFINE_CALLBACK_EVENT(call);
1225DEFINE_CALLBACK_EVENT(reply);
1226
1227/**
1228 ** Server-side RPC/RDMA events
1229 **/
1230
1231DECLARE_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
1262DEFINE_ACCEPT_EVENT(pd);
1263DEFINE_ACCEPT_EVENT(qp);
1264DEFINE_ACCEPT_EVENT(fabric);
1265DEFINE_ACCEPT_EVENT(initdepth);
1266DEFINE_ACCEPT_EVENT(accept);
1267
1268TRACE_DEFINE_ENUM(RDMA_MSG);
1269TRACE_DEFINE_ENUM(RDMA_NOMSG);
1270TRACE_DEFINE_ENUM(RDMA_MSGP);
1271TRACE_DEFINE_ENUM(RDMA_DONE);
1272TRACE_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
1282TRACE_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
1317TRACE_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
1342DECLARE_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
1382DEFINE_BADREQ_EVENT(badvers);
1383DEFINE_BADREQ_EVENT(drop);
1384DEFINE_BADREQ_EVENT(badproc);
1385DEFINE_BADREQ_EVENT(parse);
1386
1387TRACE_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
1423TRACE_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
1459TRACE_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
1496DECLARE_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
1523DEFINE_ERROR_EVENT(vers);
1524DEFINE_ERROR_EVENT(chunk);
1525
1526/**
1527 ** Server-side RDMA API events
1528 **/
1529
1530DECLARE_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
1568DEFINE_SVC_DMA_EVENT(dma_map_page);
1569DEFINE_SVC_DMA_EVENT(dma_map_err);
1570DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1571
1572TRACE_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
1601TRACE_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
1626TRACE_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
1654TRACE_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
1686TRACE_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
1714TRACE_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
1739TRACE_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
1769DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1770
1771TRACE_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
1793DEFINE_COMPLETION_EVENT(svcrdma_wc_receive);
1794
1795TRACE_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
1818DECLARE_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
1853DEFINE_POST_CHUNK_EVENT(read);
1854DEFINE_POST_CHUNK_EVENT(write);
1855DEFINE_POST_CHUNK_EVENT(reply);
1856
1857DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
1858DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1859
1860TRACE_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
1887DECLARE_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
1918DEFINE_SQ_EVENT(full);
1919DEFINE_SQ_EVENT(retry);
1920
1921TRACE_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>
1952