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