1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 3 "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> 4 5<book id="Tracepoints"> 6 <bookinfo> 7 <title>The Linux Kernel Tracepoint API</title> 8 9 <authorgroup> 10 <author> 11 <firstname>Jason</firstname> 12 <surname>Baron</surname> 13 <affiliation> 14 <address> 15 <email>jbaron@redhat.com</email> 16 </address> 17 </affiliation> 18 </author> 19 <author> 20 <firstname>William</firstname> 21 <surname>Cohen</surname> 22 <affiliation> 23 <address> 24 <email>wcohen@redhat.com</email> 25 </address> 26 </affiliation> 27 </author> 28 </authorgroup> 29 30 <legalnotice> 31 <para> 32 This documentation is free software; you can redistribute 33 it and/or modify it under the terms of the GNU General Public 34 License as published by the Free Software Foundation; either 35 version 2 of the License, or (at your option) any later 36 version. 37 </para> 38 39 <para> 40 This program is distributed in the hope that it will be 41 useful, but WITHOUT ANY WARRANTY; without even the implied 42 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 43 See the GNU General Public License for more details. 44 </para> 45 46 <para> 47 You should have received a copy of the GNU General Public 48 License along with this program; if not, write to the Free 49 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, 50 MA 02111-1307 USA 51 </para> 52 53 <para> 54 For more details see the file COPYING in the source 55 distribution of Linux. 56 </para> 57 </legalnotice> 58 </bookinfo> 59 60 <toc></toc> 61 <chapter id="intro"> 62 <title>Introduction</title> 63 <para> 64 Tracepoints are static probe points that are located in strategic points 65 throughout the kernel. 'Probes' register/unregister with tracepoints 66 via a callback mechanism. The 'probes' are strictly typed functions that 67 are passed a unique set of parameters defined by each tracepoint. 68 </para> 69 70 <para> 71 From this simple callback mechanism, 'probes' can be used to profile, debug, 72 and understand kernel behavior. There are a number of tools that provide a 73 framework for using 'probes'. These tools include Systemtap, ftrace, and 74 LTTng. 75 </para> 76 77 <para> 78 Tracepoints are defined in a number of header files via various macros. Thus, 79 the purpose of this document is to provide a clear accounting of the available 80 tracepoints. The intention is to understand not only what tracepoints are 81 available but also to understand where future tracepoints might be added. 82 </para> 83 84 <para> 85 The API presented has functions of the form: 86 <function>trace_tracepointname(function parameters)</function>. These are the 87 tracepoints callbacks that are found throughout the code. Registering and 88 unregistering probes with these callback sites is covered in the 89 <filename>Documentation/trace/*</filename> directory. 90 </para> 91 </chapter> 92 93 <chapter id="irq"> 94 <title>IRQ</title> 95<!-- include/trace/events/irq.h --> 96<refentry id="API-trace-irq-handler-entry"> 97<refentryinfo> 98 <title>LINUX</title> 99 <productname>Kernel Hackers Manual</productname> 100 <date>July 2017</date> 101</refentryinfo> 102<refmeta> 103 <refentrytitle><phrase>trace_irq_handler_entry</phrase></refentrytitle> 104 <manvolnum>9</manvolnum> 105 <refmiscinfo class="version">4.1.27</refmiscinfo> 106</refmeta> 107<refnamediv> 108 <refname>trace_irq_handler_entry</refname> 109 <refpurpose> 110 called immediately before the irq action handler 111 </refpurpose> 112</refnamediv> 113<refsynopsisdiv> 114 <title>Synopsis</title> 115 <funcsynopsis><funcprototype> 116 <funcdef>void <function>trace_irq_handler_entry </function></funcdef> 117 <paramdef>int <parameter>irq</parameter></paramdef> 118 <paramdef>struct irqaction * <parameter>action</parameter></paramdef> 119 </funcprototype></funcsynopsis> 120</refsynopsisdiv> 121<refsect1> 122 <title>Arguments</title> 123 <variablelist> 124 <varlistentry> 125 <term><parameter>irq</parameter></term> 126 <listitem> 127 <para> 128 irq number 129 </para> 130 </listitem> 131 </varlistentry> 132 <varlistentry> 133 <term><parameter>action</parameter></term> 134 <listitem> 135 <para> 136 pointer to struct irqaction 137 </para> 138 </listitem> 139 </varlistentry> 140 </variablelist> 141</refsect1> 142<refsect1> 143<title>Description</title> 144<para> 145 The struct irqaction pointed to by <parameter>action</parameter> contains various 146 information about the handler, including the device name, 147 <parameter>action</parameter>->name, and the device id, <parameter>action</parameter>->dev_id. When used in 148 conjunction with the irq_handler_exit tracepoint, we can figure 149 out irq handler latencies. 150</para> 151</refsect1> 152</refentry> 153 154<refentry id="API-trace-irq-handler-exit"> 155<refentryinfo> 156 <title>LINUX</title> 157 <productname>Kernel Hackers Manual</productname> 158 <date>July 2017</date> 159</refentryinfo> 160<refmeta> 161 <refentrytitle><phrase>trace_irq_handler_exit</phrase></refentrytitle> 162 <manvolnum>9</manvolnum> 163 <refmiscinfo class="version">4.1.27</refmiscinfo> 164</refmeta> 165<refnamediv> 166 <refname>trace_irq_handler_exit</refname> 167 <refpurpose> 168 called immediately after the irq action handler returns 169 </refpurpose> 170</refnamediv> 171<refsynopsisdiv> 172 <title>Synopsis</title> 173 <funcsynopsis><funcprototype> 174 <funcdef>void <function>trace_irq_handler_exit </function></funcdef> 175 <paramdef>int <parameter>irq</parameter></paramdef> 176 <paramdef>struct irqaction * <parameter>action</parameter></paramdef> 177 <paramdef>int <parameter>ret</parameter></paramdef> 178 </funcprototype></funcsynopsis> 179</refsynopsisdiv> 180<refsect1> 181 <title>Arguments</title> 182 <variablelist> 183 <varlistentry> 184 <term><parameter>irq</parameter></term> 185 <listitem> 186 <para> 187 irq number 188 </para> 189 </listitem> 190 </varlistentry> 191 <varlistentry> 192 <term><parameter>action</parameter></term> 193 <listitem> 194 <para> 195 pointer to struct irqaction 196 </para> 197 </listitem> 198 </varlistentry> 199 <varlistentry> 200 <term><parameter>ret</parameter></term> 201 <listitem> 202 <para> 203 return value 204 </para> 205 </listitem> 206 </varlistentry> 207 </variablelist> 208</refsect1> 209<refsect1> 210<title>Description</title> 211<para> 212 If the <parameter>ret</parameter> value is set to IRQ_HANDLED, then we know that the corresponding 213 <parameter>action</parameter>->handler scuccessully handled this irq. Otherwise, the irq might be 214 a shared irq line, or the irq was not handled successfully. Can be used in 215 conjunction with the irq_handler_entry to understand irq handler latencies. 216</para> 217</refsect1> 218</refentry> 219 220<refentry id="API-trace-softirq-entry"> 221<refentryinfo> 222 <title>LINUX</title> 223 <productname>Kernel Hackers Manual</productname> 224 <date>July 2017</date> 225</refentryinfo> 226<refmeta> 227 <refentrytitle><phrase>trace_softirq_entry</phrase></refentrytitle> 228 <manvolnum>9</manvolnum> 229 <refmiscinfo class="version">4.1.27</refmiscinfo> 230</refmeta> 231<refnamediv> 232 <refname>trace_softirq_entry</refname> 233 <refpurpose> 234 called immediately before the softirq handler 235 </refpurpose> 236</refnamediv> 237<refsynopsisdiv> 238 <title>Synopsis</title> 239 <funcsynopsis><funcprototype> 240 <funcdef>void <function>trace_softirq_entry </function></funcdef> 241 <paramdef>unsigned int <parameter>vec_nr</parameter></paramdef> 242 </funcprototype></funcsynopsis> 243</refsynopsisdiv> 244<refsect1> 245 <title>Arguments</title> 246 <variablelist> 247 <varlistentry> 248 <term><parameter>vec_nr</parameter></term> 249 <listitem> 250 <para> 251 softirq vector number 252 </para> 253 </listitem> 254 </varlistentry> 255 </variablelist> 256</refsect1> 257<refsect1> 258<title>Description</title> 259<para> 260 When used in combination with the softirq_exit tracepoint 261 we can determine the softirq handler routine. 262</para> 263</refsect1> 264</refentry> 265 266<refentry id="API-trace-softirq-exit"> 267<refentryinfo> 268 <title>LINUX</title> 269 <productname>Kernel Hackers Manual</productname> 270 <date>July 2017</date> 271</refentryinfo> 272<refmeta> 273 <refentrytitle><phrase>trace_softirq_exit</phrase></refentrytitle> 274 <manvolnum>9</manvolnum> 275 <refmiscinfo class="version">4.1.27</refmiscinfo> 276</refmeta> 277<refnamediv> 278 <refname>trace_softirq_exit</refname> 279 <refpurpose> 280 called immediately after the softirq handler returns 281 </refpurpose> 282</refnamediv> 283<refsynopsisdiv> 284 <title>Synopsis</title> 285 <funcsynopsis><funcprototype> 286 <funcdef>void <function>trace_softirq_exit </function></funcdef> 287 <paramdef>unsigned int <parameter>vec_nr</parameter></paramdef> 288 </funcprototype></funcsynopsis> 289</refsynopsisdiv> 290<refsect1> 291 <title>Arguments</title> 292 <variablelist> 293 <varlistentry> 294 <term><parameter>vec_nr</parameter></term> 295 <listitem> 296 <para> 297 softirq vector number 298 </para> 299 </listitem> 300 </varlistentry> 301 </variablelist> 302</refsect1> 303<refsect1> 304<title>Description</title> 305<para> 306 When used in combination with the softirq_entry tracepoint 307 we can determine the softirq handler routine. 308</para> 309</refsect1> 310</refentry> 311 312<refentry id="API-trace-softirq-raise"> 313<refentryinfo> 314 <title>LINUX</title> 315 <productname>Kernel Hackers Manual</productname> 316 <date>July 2017</date> 317</refentryinfo> 318<refmeta> 319 <refentrytitle><phrase>trace_softirq_raise</phrase></refentrytitle> 320 <manvolnum>9</manvolnum> 321 <refmiscinfo class="version">4.1.27</refmiscinfo> 322</refmeta> 323<refnamediv> 324 <refname>trace_softirq_raise</refname> 325 <refpurpose> 326 called immediately when a softirq is raised 327 </refpurpose> 328</refnamediv> 329<refsynopsisdiv> 330 <title>Synopsis</title> 331 <funcsynopsis><funcprototype> 332 <funcdef>void <function>trace_softirq_raise </function></funcdef> 333 <paramdef>unsigned int <parameter>vec_nr</parameter></paramdef> 334 </funcprototype></funcsynopsis> 335</refsynopsisdiv> 336<refsect1> 337 <title>Arguments</title> 338 <variablelist> 339 <varlistentry> 340 <term><parameter>vec_nr</parameter></term> 341 <listitem> 342 <para> 343 softirq vector number 344 </para> 345 </listitem> 346 </varlistentry> 347 </variablelist> 348</refsect1> 349<refsect1> 350<title>Description</title> 351<para> 352 When used in combination with the softirq_entry tracepoint 353 we can determine the softirq raise to run latency. 354</para> 355</refsect1> 356</refentry> 357 358 </chapter> 359 360 <chapter id="signal"> 361 <title>SIGNAL</title> 362<!-- include/trace/events/signal.h --> 363<refentry id="API-trace-signal-generate"> 364<refentryinfo> 365 <title>LINUX</title> 366 <productname>Kernel Hackers Manual</productname> 367 <date>July 2017</date> 368</refentryinfo> 369<refmeta> 370 <refentrytitle><phrase>trace_signal_generate</phrase></refentrytitle> 371 <manvolnum>9</manvolnum> 372 <refmiscinfo class="version">4.1.27</refmiscinfo> 373</refmeta> 374<refnamediv> 375 <refname>trace_signal_generate</refname> 376 <refpurpose> 377 called when a signal is generated 378 </refpurpose> 379</refnamediv> 380<refsynopsisdiv> 381 <title>Synopsis</title> 382 <funcsynopsis><funcprototype> 383 <funcdef>void <function>trace_signal_generate </function></funcdef> 384 <paramdef>int <parameter>sig</parameter></paramdef> 385 <paramdef>struct siginfo * <parameter>info</parameter></paramdef> 386 <paramdef>struct task_struct * <parameter>task</parameter></paramdef> 387 <paramdef>int <parameter>group</parameter></paramdef> 388 <paramdef>int <parameter>result</parameter></paramdef> 389 </funcprototype></funcsynopsis> 390</refsynopsisdiv> 391<refsect1> 392 <title>Arguments</title> 393 <variablelist> 394 <varlistentry> 395 <term><parameter>sig</parameter></term> 396 <listitem> 397 <para> 398 signal number 399 </para> 400 </listitem> 401 </varlistentry> 402 <varlistentry> 403 <term><parameter>info</parameter></term> 404 <listitem> 405 <para> 406 pointer to struct siginfo 407 </para> 408 </listitem> 409 </varlistentry> 410 <varlistentry> 411 <term><parameter>task</parameter></term> 412 <listitem> 413 <para> 414 pointer to struct task_struct 415 </para> 416 </listitem> 417 </varlistentry> 418 <varlistentry> 419 <term><parameter>group</parameter></term> 420 <listitem> 421 <para> 422 shared or private 423 </para> 424 </listitem> 425 </varlistentry> 426 <varlistentry> 427 <term><parameter>result</parameter></term> 428 <listitem> 429 <para> 430 TRACE_SIGNAL_* 431 </para> 432 </listitem> 433 </varlistentry> 434 </variablelist> 435</refsect1> 436<refsect1> 437<title>Description</title> 438<para> 439 Current process sends a 'sig' signal to 'task' process with 440 'info' siginfo. If 'info' is SEND_SIG_NOINFO or SEND_SIG_PRIV, 441 'info' is not a pointer and you can't access its field. Instead, 442 SEND_SIG_NOINFO means that si_code is SI_USER, and SEND_SIG_PRIV 443 means that si_code is SI_KERNEL. 444</para> 445</refsect1> 446</refentry> 447 448<refentry id="API-trace-signal-deliver"> 449<refentryinfo> 450 <title>LINUX</title> 451 <productname>Kernel Hackers Manual</productname> 452 <date>July 2017</date> 453</refentryinfo> 454<refmeta> 455 <refentrytitle><phrase>trace_signal_deliver</phrase></refentrytitle> 456 <manvolnum>9</manvolnum> 457 <refmiscinfo class="version">4.1.27</refmiscinfo> 458</refmeta> 459<refnamediv> 460 <refname>trace_signal_deliver</refname> 461 <refpurpose> 462 called when a signal is delivered 463 </refpurpose> 464</refnamediv> 465<refsynopsisdiv> 466 <title>Synopsis</title> 467 <funcsynopsis><funcprototype> 468 <funcdef>void <function>trace_signal_deliver </function></funcdef> 469 <paramdef>int <parameter>sig</parameter></paramdef> 470 <paramdef>struct siginfo * <parameter>info</parameter></paramdef> 471 <paramdef>struct k_sigaction * <parameter>ka</parameter></paramdef> 472 </funcprototype></funcsynopsis> 473</refsynopsisdiv> 474<refsect1> 475 <title>Arguments</title> 476 <variablelist> 477 <varlistentry> 478 <term><parameter>sig</parameter></term> 479 <listitem> 480 <para> 481 signal number 482 </para> 483 </listitem> 484 </varlistentry> 485 <varlistentry> 486 <term><parameter>info</parameter></term> 487 <listitem> 488 <para> 489 pointer to struct siginfo 490 </para> 491 </listitem> 492 </varlistentry> 493 <varlistentry> 494 <term><parameter>ka</parameter></term> 495 <listitem> 496 <para> 497 pointer to struct k_sigaction 498 </para> 499 </listitem> 500 </varlistentry> 501 </variablelist> 502</refsect1> 503<refsect1> 504<title>Description</title> 505<para> 506 A 'sig' signal is delivered to current process with 'info' siginfo, 507 and it will be handled by 'ka'. ka->sa.sa_handler can be SIG_IGN or 508 SIG_DFL. 509 Note that some signals reported by signal_generate tracepoint can be 510 lost, ignored or modified (by debugger) before hitting this tracepoint. 511 This means, this can show which signals are actually delivered, but 512 matching generated signals and delivered signals may not be correct. 513</para> 514</refsect1> 515</refentry> 516 517 </chapter> 518 519 <chapter id="block"> 520 <title>Block IO</title> 521<!-- include/trace/events/block.h --> 522<refentry id="API-trace-block-touch-buffer"> 523<refentryinfo> 524 <title>LINUX</title> 525 <productname>Kernel Hackers Manual</productname> 526 <date>July 2017</date> 527</refentryinfo> 528<refmeta> 529 <refentrytitle><phrase>trace_block_touch_buffer</phrase></refentrytitle> 530 <manvolnum>9</manvolnum> 531 <refmiscinfo class="version">4.1.27</refmiscinfo> 532</refmeta> 533<refnamediv> 534 <refname>trace_block_touch_buffer</refname> 535 <refpurpose> 536 mark a buffer accessed 537 </refpurpose> 538</refnamediv> 539<refsynopsisdiv> 540 <title>Synopsis</title> 541 <funcsynopsis><funcprototype> 542 <funcdef>void <function>trace_block_touch_buffer </function></funcdef> 543 <paramdef>struct buffer_head * <parameter>bh</parameter></paramdef> 544 </funcprototype></funcsynopsis> 545</refsynopsisdiv> 546<refsect1> 547 <title>Arguments</title> 548 <variablelist> 549 <varlistentry> 550 <term><parameter>bh</parameter></term> 551 <listitem> 552 <para> 553 buffer_head being touched 554 </para> 555 </listitem> 556 </varlistentry> 557 </variablelist> 558</refsect1> 559<refsect1> 560<title>Description</title> 561<para> 562 Called from <function>touch_buffer</function>. 563</para> 564</refsect1> 565</refentry> 566 567<refentry id="API-trace-block-dirty-buffer"> 568<refentryinfo> 569 <title>LINUX</title> 570 <productname>Kernel Hackers Manual</productname> 571 <date>July 2017</date> 572</refentryinfo> 573<refmeta> 574 <refentrytitle><phrase>trace_block_dirty_buffer</phrase></refentrytitle> 575 <manvolnum>9</manvolnum> 576 <refmiscinfo class="version">4.1.27</refmiscinfo> 577</refmeta> 578<refnamediv> 579 <refname>trace_block_dirty_buffer</refname> 580 <refpurpose> 581 mark a buffer dirty 582 </refpurpose> 583</refnamediv> 584<refsynopsisdiv> 585 <title>Synopsis</title> 586 <funcsynopsis><funcprototype> 587 <funcdef>void <function>trace_block_dirty_buffer </function></funcdef> 588 <paramdef>struct buffer_head * <parameter>bh</parameter></paramdef> 589 </funcprototype></funcsynopsis> 590</refsynopsisdiv> 591<refsect1> 592 <title>Arguments</title> 593 <variablelist> 594 <varlistentry> 595 <term><parameter>bh</parameter></term> 596 <listitem> 597 <para> 598 buffer_head being dirtied 599 </para> 600 </listitem> 601 </varlistentry> 602 </variablelist> 603</refsect1> 604<refsect1> 605<title>Description</title> 606<para> 607 Called from <function>mark_buffer_dirty</function>. 608</para> 609</refsect1> 610</refentry> 611 612<refentry id="API-trace-block-rq-abort"> 613<refentryinfo> 614 <title>LINUX</title> 615 <productname>Kernel Hackers Manual</productname> 616 <date>July 2017</date> 617</refentryinfo> 618<refmeta> 619 <refentrytitle><phrase>trace_block_rq_abort</phrase></refentrytitle> 620 <manvolnum>9</manvolnum> 621 <refmiscinfo class="version">4.1.27</refmiscinfo> 622</refmeta> 623<refnamediv> 624 <refname>trace_block_rq_abort</refname> 625 <refpurpose> 626 abort block operation request 627 </refpurpose> 628</refnamediv> 629<refsynopsisdiv> 630 <title>Synopsis</title> 631 <funcsynopsis><funcprototype> 632 <funcdef>void <function>trace_block_rq_abort </function></funcdef> 633 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 634 <paramdef>struct request * <parameter>rq</parameter></paramdef> 635 </funcprototype></funcsynopsis> 636</refsynopsisdiv> 637<refsect1> 638 <title>Arguments</title> 639 <variablelist> 640 <varlistentry> 641 <term><parameter>q</parameter></term> 642 <listitem> 643 <para> 644 queue containing the block operation request 645 </para> 646 </listitem> 647 </varlistentry> 648 <varlistentry> 649 <term><parameter>rq</parameter></term> 650 <listitem> 651 <para> 652 block IO operation request 653 </para> 654 </listitem> 655 </varlistentry> 656 </variablelist> 657</refsect1> 658<refsect1> 659<title>Description</title> 660<para> 661 Called immediately after pending block IO operation request <parameter>rq</parameter> in 662 queue <parameter>q</parameter> is aborted. The fields in the operation request <parameter>rq</parameter> 663 can be examined to determine which device and sectors the pending 664 operation would access. 665</para> 666</refsect1> 667</refentry> 668 669<refentry id="API-trace-block-rq-requeue"> 670<refentryinfo> 671 <title>LINUX</title> 672 <productname>Kernel Hackers Manual</productname> 673 <date>July 2017</date> 674</refentryinfo> 675<refmeta> 676 <refentrytitle><phrase>trace_block_rq_requeue</phrase></refentrytitle> 677 <manvolnum>9</manvolnum> 678 <refmiscinfo class="version">4.1.27</refmiscinfo> 679</refmeta> 680<refnamediv> 681 <refname>trace_block_rq_requeue</refname> 682 <refpurpose> 683 place block IO request back on a queue 684 </refpurpose> 685</refnamediv> 686<refsynopsisdiv> 687 <title>Synopsis</title> 688 <funcsynopsis><funcprototype> 689 <funcdef>void <function>trace_block_rq_requeue </function></funcdef> 690 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 691 <paramdef>struct request * <parameter>rq</parameter></paramdef> 692 </funcprototype></funcsynopsis> 693</refsynopsisdiv> 694<refsect1> 695 <title>Arguments</title> 696 <variablelist> 697 <varlistentry> 698 <term><parameter>q</parameter></term> 699 <listitem> 700 <para> 701 queue holding operation 702 </para> 703 </listitem> 704 </varlistentry> 705 <varlistentry> 706 <term><parameter>rq</parameter></term> 707 <listitem> 708 <para> 709 block IO operation request 710 </para> 711 </listitem> 712 </varlistentry> 713 </variablelist> 714</refsect1> 715<refsect1> 716<title>Description</title> 717<para> 718 The block operation request <parameter>rq</parameter> is being placed back into queue 719 <parameter>q</parameter>. For some reason the request was not completed and needs to be 720 put back in the queue. 721</para> 722</refsect1> 723</refentry> 724 725<refentry id="API-trace-block-rq-complete"> 726<refentryinfo> 727 <title>LINUX</title> 728 <productname>Kernel Hackers Manual</productname> 729 <date>July 2017</date> 730</refentryinfo> 731<refmeta> 732 <refentrytitle><phrase>trace_block_rq_complete</phrase></refentrytitle> 733 <manvolnum>9</manvolnum> 734 <refmiscinfo class="version">4.1.27</refmiscinfo> 735</refmeta> 736<refnamediv> 737 <refname>trace_block_rq_complete</refname> 738 <refpurpose> 739 block IO operation completed by device driver 740 </refpurpose> 741</refnamediv> 742<refsynopsisdiv> 743 <title>Synopsis</title> 744 <funcsynopsis><funcprototype> 745 <funcdef>void <function>trace_block_rq_complete </function></funcdef> 746 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 747 <paramdef>struct request * <parameter>rq</parameter></paramdef> 748 <paramdef>unsigned int <parameter>nr_bytes</parameter></paramdef> 749 </funcprototype></funcsynopsis> 750</refsynopsisdiv> 751<refsect1> 752 <title>Arguments</title> 753 <variablelist> 754 <varlistentry> 755 <term><parameter>q</parameter></term> 756 <listitem> 757 <para> 758 queue containing the block operation request 759 </para> 760 </listitem> 761 </varlistentry> 762 <varlistentry> 763 <term><parameter>rq</parameter></term> 764 <listitem> 765 <para> 766 block operations request 767 </para> 768 </listitem> 769 </varlistentry> 770 <varlistentry> 771 <term><parameter>nr_bytes</parameter></term> 772 <listitem> 773 <para> 774 number of completed bytes 775 </para> 776 </listitem> 777 </varlistentry> 778 </variablelist> 779</refsect1> 780<refsect1> 781<title>Description</title> 782<para> 783 The block_rq_complete tracepoint event indicates that some portion 784 of operation request has been completed by the device driver. If 785 the <parameter>rq</parameter>->bio is <constant>NULL</constant>, then there is absolutely no additional work to 786 do for the request. If <parameter>rq</parameter>->bio is non-NULL then there is 787 additional work required to complete the request. 788</para> 789</refsect1> 790</refentry> 791 792<refentry id="API-trace-block-rq-insert"> 793<refentryinfo> 794 <title>LINUX</title> 795 <productname>Kernel Hackers Manual</productname> 796 <date>July 2017</date> 797</refentryinfo> 798<refmeta> 799 <refentrytitle><phrase>trace_block_rq_insert</phrase></refentrytitle> 800 <manvolnum>9</manvolnum> 801 <refmiscinfo class="version">4.1.27</refmiscinfo> 802</refmeta> 803<refnamediv> 804 <refname>trace_block_rq_insert</refname> 805 <refpurpose> 806 insert block operation request into queue 807 </refpurpose> 808</refnamediv> 809<refsynopsisdiv> 810 <title>Synopsis</title> 811 <funcsynopsis><funcprototype> 812 <funcdef>void <function>trace_block_rq_insert </function></funcdef> 813 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 814 <paramdef>struct request * <parameter>rq</parameter></paramdef> 815 </funcprototype></funcsynopsis> 816</refsynopsisdiv> 817<refsect1> 818 <title>Arguments</title> 819 <variablelist> 820 <varlistentry> 821 <term><parameter>q</parameter></term> 822 <listitem> 823 <para> 824 target queue 825 </para> 826 </listitem> 827 </varlistentry> 828 <varlistentry> 829 <term><parameter>rq</parameter></term> 830 <listitem> 831 <para> 832 block IO operation request 833 </para> 834 </listitem> 835 </varlistentry> 836 </variablelist> 837</refsect1> 838<refsect1> 839<title>Description</title> 840<para> 841 Called immediately before block operation request <parameter>rq</parameter> is inserted 842 into queue <parameter>q</parameter>. The fields in the operation request <parameter>rq</parameter> struct can 843 be examined to determine which device and sectors the pending 844 operation would access. 845</para> 846</refsect1> 847</refentry> 848 849<refentry id="API-trace-block-rq-issue"> 850<refentryinfo> 851 <title>LINUX</title> 852 <productname>Kernel Hackers Manual</productname> 853 <date>July 2017</date> 854</refentryinfo> 855<refmeta> 856 <refentrytitle><phrase>trace_block_rq_issue</phrase></refentrytitle> 857 <manvolnum>9</manvolnum> 858 <refmiscinfo class="version">4.1.27</refmiscinfo> 859</refmeta> 860<refnamediv> 861 <refname>trace_block_rq_issue</refname> 862 <refpurpose> 863 issue pending block IO request operation to device driver 864 </refpurpose> 865</refnamediv> 866<refsynopsisdiv> 867 <title>Synopsis</title> 868 <funcsynopsis><funcprototype> 869 <funcdef>void <function>trace_block_rq_issue </function></funcdef> 870 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 871 <paramdef>struct request * <parameter>rq</parameter></paramdef> 872 </funcprototype></funcsynopsis> 873</refsynopsisdiv> 874<refsect1> 875 <title>Arguments</title> 876 <variablelist> 877 <varlistentry> 878 <term><parameter>q</parameter></term> 879 <listitem> 880 <para> 881 queue holding operation 882 </para> 883 </listitem> 884 </varlistentry> 885 <varlistentry> 886 <term><parameter>rq</parameter></term> 887 <listitem> 888 <para> 889 block IO operation operation request 890 </para> 891 </listitem> 892 </varlistentry> 893 </variablelist> 894</refsect1> 895<refsect1> 896<title>Description</title> 897<para> 898 Called when block operation request <parameter>rq</parameter> from queue <parameter>q</parameter> is sent to a 899 device driver for processing. 900</para> 901</refsect1> 902</refentry> 903 904<refentry id="API-trace-block-bio-bounce"> 905<refentryinfo> 906 <title>LINUX</title> 907 <productname>Kernel Hackers Manual</productname> 908 <date>July 2017</date> 909</refentryinfo> 910<refmeta> 911 <refentrytitle><phrase>trace_block_bio_bounce</phrase></refentrytitle> 912 <manvolnum>9</manvolnum> 913 <refmiscinfo class="version">4.1.27</refmiscinfo> 914</refmeta> 915<refnamediv> 916 <refname>trace_block_bio_bounce</refname> 917 <refpurpose> 918 used bounce buffer when processing block operation 919 </refpurpose> 920</refnamediv> 921<refsynopsisdiv> 922 <title>Synopsis</title> 923 <funcsynopsis><funcprototype> 924 <funcdef>void <function>trace_block_bio_bounce </function></funcdef> 925 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 926 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 927 </funcprototype></funcsynopsis> 928</refsynopsisdiv> 929<refsect1> 930 <title>Arguments</title> 931 <variablelist> 932 <varlistentry> 933 <term><parameter>q</parameter></term> 934 <listitem> 935 <para> 936 queue holding the block operation 937 </para> 938 </listitem> 939 </varlistentry> 940 <varlistentry> 941 <term><parameter>bio</parameter></term> 942 <listitem> 943 <para> 944 block operation 945 </para> 946 </listitem> 947 </varlistentry> 948 </variablelist> 949</refsect1> 950<refsect1> 951<title>Description</title> 952<para> 953 A bounce buffer was used to handle the block operation <parameter>bio</parameter> in <parameter>q</parameter>. 954 This occurs when hardware limitations prevent a direct transfer of 955 data between the <parameter>bio</parameter> data memory area and the IO device. Use of a 956 bounce buffer requires extra copying of data and decreases 957 performance. 958</para> 959</refsect1> 960</refentry> 961 962<refentry id="API-trace-block-bio-complete"> 963<refentryinfo> 964 <title>LINUX</title> 965 <productname>Kernel Hackers Manual</productname> 966 <date>July 2017</date> 967</refentryinfo> 968<refmeta> 969 <refentrytitle><phrase>trace_block_bio_complete</phrase></refentrytitle> 970 <manvolnum>9</manvolnum> 971 <refmiscinfo class="version">4.1.27</refmiscinfo> 972</refmeta> 973<refnamediv> 974 <refname>trace_block_bio_complete</refname> 975 <refpurpose> 976 completed all work on the block operation 977 </refpurpose> 978</refnamediv> 979<refsynopsisdiv> 980 <title>Synopsis</title> 981 <funcsynopsis><funcprototype> 982 <funcdef>void <function>trace_block_bio_complete </function></funcdef> 983 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 984 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 985 <paramdef>int <parameter>error</parameter></paramdef> 986 </funcprototype></funcsynopsis> 987</refsynopsisdiv> 988<refsect1> 989 <title>Arguments</title> 990 <variablelist> 991 <varlistentry> 992 <term><parameter>q</parameter></term> 993 <listitem> 994 <para> 995 queue holding the block operation 996 </para> 997 </listitem> 998 </varlistentry> 999 <varlistentry> 1000 <term><parameter>bio</parameter></term> 1001 <listitem> 1002 <para> 1003 block operation completed 1004 </para> 1005 </listitem> 1006 </varlistentry> 1007 <varlistentry> 1008 <term><parameter>error</parameter></term> 1009 <listitem> 1010 <para> 1011 io error value 1012 </para> 1013 </listitem> 1014 </varlistentry> 1015 </variablelist> 1016</refsect1> 1017<refsect1> 1018<title>Description</title> 1019<para> 1020 This tracepoint indicates there is no further work to do on this 1021 block IO operation <parameter>bio</parameter>. 1022</para> 1023</refsect1> 1024</refentry> 1025 1026<refentry id="API-trace-block-bio-backmerge"> 1027<refentryinfo> 1028 <title>LINUX</title> 1029 <productname>Kernel Hackers Manual</productname> 1030 <date>July 2017</date> 1031</refentryinfo> 1032<refmeta> 1033 <refentrytitle><phrase>trace_block_bio_backmerge</phrase></refentrytitle> 1034 <manvolnum>9</manvolnum> 1035 <refmiscinfo class="version">4.1.27</refmiscinfo> 1036</refmeta> 1037<refnamediv> 1038 <refname>trace_block_bio_backmerge</refname> 1039 <refpurpose> 1040 merging block operation to the end of an existing operation 1041 </refpurpose> 1042</refnamediv> 1043<refsynopsisdiv> 1044 <title>Synopsis</title> 1045 <funcsynopsis><funcprototype> 1046 <funcdef>void <function>trace_block_bio_backmerge </function></funcdef> 1047 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1048 <paramdef>struct request * <parameter>rq</parameter></paramdef> 1049 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1050 </funcprototype></funcsynopsis> 1051</refsynopsisdiv> 1052<refsect1> 1053 <title>Arguments</title> 1054 <variablelist> 1055 <varlistentry> 1056 <term><parameter>q</parameter></term> 1057 <listitem> 1058 <para> 1059 queue holding operation 1060 </para> 1061 </listitem> 1062 </varlistentry> 1063 <varlistentry> 1064 <term><parameter>rq</parameter></term> 1065 <listitem> 1066 <para> 1067 request bio is being merged into 1068 </para> 1069 </listitem> 1070 </varlistentry> 1071 <varlistentry> 1072 <term><parameter>bio</parameter></term> 1073 <listitem> 1074 <para> 1075 new block operation to merge 1076 </para> 1077 </listitem> 1078 </varlistentry> 1079 </variablelist> 1080</refsect1> 1081<refsect1> 1082<title>Description</title> 1083<para> 1084 Merging block request <parameter>bio</parameter> to the end of an existing block request 1085 in queue <parameter>q</parameter>. 1086</para> 1087</refsect1> 1088</refentry> 1089 1090<refentry id="API-trace-block-bio-frontmerge"> 1091<refentryinfo> 1092 <title>LINUX</title> 1093 <productname>Kernel Hackers Manual</productname> 1094 <date>July 2017</date> 1095</refentryinfo> 1096<refmeta> 1097 <refentrytitle><phrase>trace_block_bio_frontmerge</phrase></refentrytitle> 1098 <manvolnum>9</manvolnum> 1099 <refmiscinfo class="version">4.1.27</refmiscinfo> 1100</refmeta> 1101<refnamediv> 1102 <refname>trace_block_bio_frontmerge</refname> 1103 <refpurpose> 1104 merging block operation to the beginning of an existing operation 1105 </refpurpose> 1106</refnamediv> 1107<refsynopsisdiv> 1108 <title>Synopsis</title> 1109 <funcsynopsis><funcprototype> 1110 <funcdef>void <function>trace_block_bio_frontmerge </function></funcdef> 1111 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1112 <paramdef>struct request * <parameter>rq</parameter></paramdef> 1113 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1114 </funcprototype></funcsynopsis> 1115</refsynopsisdiv> 1116<refsect1> 1117 <title>Arguments</title> 1118 <variablelist> 1119 <varlistentry> 1120 <term><parameter>q</parameter></term> 1121 <listitem> 1122 <para> 1123 queue holding operation 1124 </para> 1125 </listitem> 1126 </varlistentry> 1127 <varlistentry> 1128 <term><parameter>rq</parameter></term> 1129 <listitem> 1130 <para> 1131 request bio is being merged into 1132 </para> 1133 </listitem> 1134 </varlistentry> 1135 <varlistentry> 1136 <term><parameter>bio</parameter></term> 1137 <listitem> 1138 <para> 1139 new block operation to merge 1140 </para> 1141 </listitem> 1142 </varlistentry> 1143 </variablelist> 1144</refsect1> 1145<refsect1> 1146<title>Description</title> 1147<para> 1148 Merging block IO operation <parameter>bio</parameter> to the beginning of an existing block 1149 operation in queue <parameter>q</parameter>. 1150</para> 1151</refsect1> 1152</refentry> 1153 1154<refentry id="API-trace-block-bio-queue"> 1155<refentryinfo> 1156 <title>LINUX</title> 1157 <productname>Kernel Hackers Manual</productname> 1158 <date>July 2017</date> 1159</refentryinfo> 1160<refmeta> 1161 <refentrytitle><phrase>trace_block_bio_queue</phrase></refentrytitle> 1162 <manvolnum>9</manvolnum> 1163 <refmiscinfo class="version">4.1.27</refmiscinfo> 1164</refmeta> 1165<refnamediv> 1166 <refname>trace_block_bio_queue</refname> 1167 <refpurpose> 1168 putting new block IO operation in queue 1169 </refpurpose> 1170</refnamediv> 1171<refsynopsisdiv> 1172 <title>Synopsis</title> 1173 <funcsynopsis><funcprototype> 1174 <funcdef>void <function>trace_block_bio_queue </function></funcdef> 1175 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1176 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1177 </funcprototype></funcsynopsis> 1178</refsynopsisdiv> 1179<refsect1> 1180 <title>Arguments</title> 1181 <variablelist> 1182 <varlistentry> 1183 <term><parameter>q</parameter></term> 1184 <listitem> 1185 <para> 1186 queue holding operation 1187 </para> 1188 </listitem> 1189 </varlistentry> 1190 <varlistentry> 1191 <term><parameter>bio</parameter></term> 1192 <listitem> 1193 <para> 1194 new block operation 1195 </para> 1196 </listitem> 1197 </varlistentry> 1198 </variablelist> 1199</refsect1> 1200<refsect1> 1201<title>Description</title> 1202<para> 1203 About to place the block IO operation <parameter>bio</parameter> into queue <parameter>q</parameter>. 1204</para> 1205</refsect1> 1206</refentry> 1207 1208<refentry id="API-trace-block-getrq"> 1209<refentryinfo> 1210 <title>LINUX</title> 1211 <productname>Kernel Hackers Manual</productname> 1212 <date>July 2017</date> 1213</refentryinfo> 1214<refmeta> 1215 <refentrytitle><phrase>trace_block_getrq</phrase></refentrytitle> 1216 <manvolnum>9</manvolnum> 1217 <refmiscinfo class="version">4.1.27</refmiscinfo> 1218</refmeta> 1219<refnamediv> 1220 <refname>trace_block_getrq</refname> 1221 <refpurpose> 1222 get a free request entry in queue for block IO operations 1223 </refpurpose> 1224</refnamediv> 1225<refsynopsisdiv> 1226 <title>Synopsis</title> 1227 <funcsynopsis><funcprototype> 1228 <funcdef>void <function>trace_block_getrq </function></funcdef> 1229 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1230 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1231 <paramdef>int <parameter>rw</parameter></paramdef> 1232 </funcprototype></funcsynopsis> 1233</refsynopsisdiv> 1234<refsect1> 1235 <title>Arguments</title> 1236 <variablelist> 1237 <varlistentry> 1238 <term><parameter>q</parameter></term> 1239 <listitem> 1240 <para> 1241 queue for operations 1242 </para> 1243 </listitem> 1244 </varlistentry> 1245 <varlistentry> 1246 <term><parameter>bio</parameter></term> 1247 <listitem> 1248 <para> 1249 pending block IO operation 1250 </para> 1251 </listitem> 1252 </varlistentry> 1253 <varlistentry> 1254 <term><parameter>rw</parameter></term> 1255 <listitem> 1256 <para> 1257 low bit indicates a read (<constant>0</constant>) or a write (<constant>1</constant>) 1258 </para> 1259 </listitem> 1260 </varlistentry> 1261 </variablelist> 1262</refsect1> 1263<refsect1> 1264<title>Description</title> 1265<para> 1266 A request struct for queue <parameter>q</parameter> has been allocated to handle the 1267 block IO operation <parameter>bio</parameter>. 1268</para> 1269</refsect1> 1270</refentry> 1271 1272<refentry id="API-trace-block-sleeprq"> 1273<refentryinfo> 1274 <title>LINUX</title> 1275 <productname>Kernel Hackers Manual</productname> 1276 <date>July 2017</date> 1277</refentryinfo> 1278<refmeta> 1279 <refentrytitle><phrase>trace_block_sleeprq</phrase></refentrytitle> 1280 <manvolnum>9</manvolnum> 1281 <refmiscinfo class="version">4.1.27</refmiscinfo> 1282</refmeta> 1283<refnamediv> 1284 <refname>trace_block_sleeprq</refname> 1285 <refpurpose> 1286 waiting to get a free request entry in queue for block IO operation 1287 </refpurpose> 1288</refnamediv> 1289<refsynopsisdiv> 1290 <title>Synopsis</title> 1291 <funcsynopsis><funcprototype> 1292 <funcdef>void <function>trace_block_sleeprq </function></funcdef> 1293 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1294 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1295 <paramdef>int <parameter>rw</parameter></paramdef> 1296 </funcprototype></funcsynopsis> 1297</refsynopsisdiv> 1298<refsect1> 1299 <title>Arguments</title> 1300 <variablelist> 1301 <varlistentry> 1302 <term><parameter>q</parameter></term> 1303 <listitem> 1304 <para> 1305 queue for operation 1306 </para> 1307 </listitem> 1308 </varlistentry> 1309 <varlistentry> 1310 <term><parameter>bio</parameter></term> 1311 <listitem> 1312 <para> 1313 pending block IO operation 1314 </para> 1315 </listitem> 1316 </varlistentry> 1317 <varlistentry> 1318 <term><parameter>rw</parameter></term> 1319 <listitem> 1320 <para> 1321 low bit indicates a read (<constant>0</constant>) or a write (<constant>1</constant>) 1322 </para> 1323 </listitem> 1324 </varlistentry> 1325 </variablelist> 1326</refsect1> 1327<refsect1> 1328<title>Description</title> 1329<para> 1330 In the case where a request struct cannot be provided for queue <parameter>q</parameter> 1331 the process needs to wait for an request struct to become 1332 available. This tracepoint event is generated each time the 1333 process goes to sleep waiting for request struct become available. 1334</para> 1335</refsect1> 1336</refentry> 1337 1338<refentry id="API-trace-block-plug"> 1339<refentryinfo> 1340 <title>LINUX</title> 1341 <productname>Kernel Hackers Manual</productname> 1342 <date>July 2017</date> 1343</refentryinfo> 1344<refmeta> 1345 <refentrytitle><phrase>trace_block_plug</phrase></refentrytitle> 1346 <manvolnum>9</manvolnum> 1347 <refmiscinfo class="version">4.1.27</refmiscinfo> 1348</refmeta> 1349<refnamediv> 1350 <refname>trace_block_plug</refname> 1351 <refpurpose> 1352 keep operations requests in request queue 1353 </refpurpose> 1354</refnamediv> 1355<refsynopsisdiv> 1356 <title>Synopsis</title> 1357 <funcsynopsis><funcprototype> 1358 <funcdef>void <function>trace_block_plug </function></funcdef> 1359 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1360 </funcprototype></funcsynopsis> 1361</refsynopsisdiv> 1362<refsect1> 1363 <title>Arguments</title> 1364 <variablelist> 1365 <varlistentry> 1366 <term><parameter>q</parameter></term> 1367 <listitem> 1368 <para> 1369 request queue to plug 1370 </para> 1371 </listitem> 1372 </varlistentry> 1373 </variablelist> 1374</refsect1> 1375<refsect1> 1376<title>Description</title> 1377<para> 1378 Plug the request queue <parameter>q</parameter>. Do not allow block operation requests 1379 to be sent to the device driver. Instead, accumulate requests in 1380 the queue to improve throughput performance of the block device. 1381</para> 1382</refsect1> 1383</refentry> 1384 1385<refentry id="API-trace-block-unplug"> 1386<refentryinfo> 1387 <title>LINUX</title> 1388 <productname>Kernel Hackers Manual</productname> 1389 <date>July 2017</date> 1390</refentryinfo> 1391<refmeta> 1392 <refentrytitle><phrase>trace_block_unplug</phrase></refentrytitle> 1393 <manvolnum>9</manvolnum> 1394 <refmiscinfo class="version">4.1.27</refmiscinfo> 1395</refmeta> 1396<refnamediv> 1397 <refname>trace_block_unplug</refname> 1398 <refpurpose> 1399 release of operations requests in request queue 1400 </refpurpose> 1401</refnamediv> 1402<refsynopsisdiv> 1403 <title>Synopsis</title> 1404 <funcsynopsis><funcprototype> 1405 <funcdef>void <function>trace_block_unplug </function></funcdef> 1406 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1407 <paramdef>unsigned int <parameter>depth</parameter></paramdef> 1408 <paramdef>bool <parameter>explicit</parameter></paramdef> 1409 </funcprototype></funcsynopsis> 1410</refsynopsisdiv> 1411<refsect1> 1412 <title>Arguments</title> 1413 <variablelist> 1414 <varlistentry> 1415 <term><parameter>q</parameter></term> 1416 <listitem> 1417 <para> 1418 request queue to unplug 1419 </para> 1420 </listitem> 1421 </varlistentry> 1422 <varlistentry> 1423 <term><parameter>depth</parameter></term> 1424 <listitem> 1425 <para> 1426 number of requests just added to the queue 1427 </para> 1428 </listitem> 1429 </varlistentry> 1430 <varlistentry> 1431 <term><parameter>explicit</parameter></term> 1432 <listitem> 1433 <para> 1434 whether this was an explicit unplug, or one from <function>schedule</function> 1435 </para> 1436 </listitem> 1437 </varlistentry> 1438 </variablelist> 1439</refsect1> 1440<refsect1> 1441<title>Description</title> 1442<para> 1443 Unplug request queue <parameter>q</parameter> because device driver is scheduled to work 1444 on elements in the request queue. 1445</para> 1446</refsect1> 1447</refentry> 1448 1449<refentry id="API-trace-block-split"> 1450<refentryinfo> 1451 <title>LINUX</title> 1452 <productname>Kernel Hackers Manual</productname> 1453 <date>July 2017</date> 1454</refentryinfo> 1455<refmeta> 1456 <refentrytitle><phrase>trace_block_split</phrase></refentrytitle> 1457 <manvolnum>9</manvolnum> 1458 <refmiscinfo class="version">4.1.27</refmiscinfo> 1459</refmeta> 1460<refnamediv> 1461 <refname>trace_block_split</refname> 1462 <refpurpose> 1463 split a single bio struct into two bio structs 1464 </refpurpose> 1465</refnamediv> 1466<refsynopsisdiv> 1467 <title>Synopsis</title> 1468 <funcsynopsis><funcprototype> 1469 <funcdef>void <function>trace_block_split </function></funcdef> 1470 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1471 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1472 <paramdef>unsigned int <parameter>new_sector</parameter></paramdef> 1473 </funcprototype></funcsynopsis> 1474</refsynopsisdiv> 1475<refsect1> 1476 <title>Arguments</title> 1477 <variablelist> 1478 <varlistentry> 1479 <term><parameter>q</parameter></term> 1480 <listitem> 1481 <para> 1482 queue containing the bio 1483 </para> 1484 </listitem> 1485 </varlistentry> 1486 <varlistentry> 1487 <term><parameter>bio</parameter></term> 1488 <listitem> 1489 <para> 1490 block operation being split 1491 </para> 1492 </listitem> 1493 </varlistentry> 1494 <varlistentry> 1495 <term><parameter>new_sector</parameter></term> 1496 <listitem> 1497 <para> 1498 The starting sector for the new bio 1499 </para> 1500 </listitem> 1501 </varlistentry> 1502 </variablelist> 1503</refsect1> 1504<refsect1> 1505<title>Description</title> 1506<para> 1507 The bio request <parameter>bio</parameter> in request queue <parameter>q</parameter> needs to be split into two 1508 bio requests. The newly created <parameter>bio</parameter> request starts at 1509 <parameter>new_sector</parameter>. This split may be required due to hardware limitation 1510 such as operation crossing device boundaries in a RAID system. 1511</para> 1512</refsect1> 1513</refentry> 1514 1515<refentry id="API-trace-block-bio-remap"> 1516<refentryinfo> 1517 <title>LINUX</title> 1518 <productname>Kernel Hackers Manual</productname> 1519 <date>July 2017</date> 1520</refentryinfo> 1521<refmeta> 1522 <refentrytitle><phrase>trace_block_bio_remap</phrase></refentrytitle> 1523 <manvolnum>9</manvolnum> 1524 <refmiscinfo class="version">4.1.27</refmiscinfo> 1525</refmeta> 1526<refnamediv> 1527 <refname>trace_block_bio_remap</refname> 1528 <refpurpose> 1529 map request for a logical device to the raw device 1530 </refpurpose> 1531</refnamediv> 1532<refsynopsisdiv> 1533 <title>Synopsis</title> 1534 <funcsynopsis><funcprototype> 1535 <funcdef>void <function>trace_block_bio_remap </function></funcdef> 1536 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1537 <paramdef>struct bio * <parameter>bio</parameter></paramdef> 1538 <paramdef>dev_t <parameter>dev</parameter></paramdef> 1539 <paramdef>sector_t <parameter>from</parameter></paramdef> 1540 </funcprototype></funcsynopsis> 1541</refsynopsisdiv> 1542<refsect1> 1543 <title>Arguments</title> 1544 <variablelist> 1545 <varlistentry> 1546 <term><parameter>q</parameter></term> 1547 <listitem> 1548 <para> 1549 queue holding the operation 1550 </para> 1551 </listitem> 1552 </varlistentry> 1553 <varlistentry> 1554 <term><parameter>bio</parameter></term> 1555 <listitem> 1556 <para> 1557 revised operation 1558 </para> 1559 </listitem> 1560 </varlistentry> 1561 <varlistentry> 1562 <term><parameter>dev</parameter></term> 1563 <listitem> 1564 <para> 1565 device for the operation 1566 </para> 1567 </listitem> 1568 </varlistentry> 1569 <varlistentry> 1570 <term><parameter>from</parameter></term> 1571 <listitem> 1572 <para> 1573 original sector for the operation 1574 </para> 1575 </listitem> 1576 </varlistentry> 1577 </variablelist> 1578</refsect1> 1579<refsect1> 1580<title>Description</title> 1581<para> 1582 An operation for a logical device has been mapped to the 1583 raw block device. 1584</para> 1585</refsect1> 1586</refentry> 1587 1588<refentry id="API-trace-block-rq-remap"> 1589<refentryinfo> 1590 <title>LINUX</title> 1591 <productname>Kernel Hackers Manual</productname> 1592 <date>July 2017</date> 1593</refentryinfo> 1594<refmeta> 1595 <refentrytitle><phrase>trace_block_rq_remap</phrase></refentrytitle> 1596 <manvolnum>9</manvolnum> 1597 <refmiscinfo class="version">4.1.27</refmiscinfo> 1598</refmeta> 1599<refnamediv> 1600 <refname>trace_block_rq_remap</refname> 1601 <refpurpose> 1602 map request for a block operation request 1603 </refpurpose> 1604</refnamediv> 1605<refsynopsisdiv> 1606 <title>Synopsis</title> 1607 <funcsynopsis><funcprototype> 1608 <funcdef>void <function>trace_block_rq_remap </function></funcdef> 1609 <paramdef>struct request_queue * <parameter>q</parameter></paramdef> 1610 <paramdef>struct request * <parameter>rq</parameter></paramdef> 1611 <paramdef>dev_t <parameter>dev</parameter></paramdef> 1612 <paramdef>sector_t <parameter>from</parameter></paramdef> 1613 </funcprototype></funcsynopsis> 1614</refsynopsisdiv> 1615<refsect1> 1616 <title>Arguments</title> 1617 <variablelist> 1618 <varlistentry> 1619 <term><parameter>q</parameter></term> 1620 <listitem> 1621 <para> 1622 queue holding the operation 1623 </para> 1624 </listitem> 1625 </varlistentry> 1626 <varlistentry> 1627 <term><parameter>rq</parameter></term> 1628 <listitem> 1629 <para> 1630 block IO operation request 1631 </para> 1632 </listitem> 1633 </varlistentry> 1634 <varlistentry> 1635 <term><parameter>dev</parameter></term> 1636 <listitem> 1637 <para> 1638 device for the operation 1639 </para> 1640 </listitem> 1641 </varlistentry> 1642 <varlistentry> 1643 <term><parameter>from</parameter></term> 1644 <listitem> 1645 <para> 1646 original sector for the operation 1647 </para> 1648 </listitem> 1649 </varlistentry> 1650 </variablelist> 1651</refsect1> 1652<refsect1> 1653<title>Description</title> 1654<para> 1655 The block operation request <parameter>rq</parameter> in <parameter>q</parameter> has been remapped. The block 1656 operation request <parameter>rq</parameter> holds the current information and <parameter>from</parameter> hold 1657 the original sector. 1658</para> 1659</refsect1> 1660</refentry> 1661 1662 </chapter> 1663 1664 <chapter id="workqueue"> 1665 <title>Workqueue</title> 1666<!-- include/trace/events/workqueue.h --> 1667<refentry id="API-trace-workqueue-queue-work"> 1668<refentryinfo> 1669 <title>LINUX</title> 1670 <productname>Kernel Hackers Manual</productname> 1671 <date>July 2017</date> 1672</refentryinfo> 1673<refmeta> 1674 <refentrytitle><phrase>trace_workqueue_queue_work</phrase></refentrytitle> 1675 <manvolnum>9</manvolnum> 1676 <refmiscinfo class="version">4.1.27</refmiscinfo> 1677</refmeta> 1678<refnamediv> 1679 <refname>trace_workqueue_queue_work</refname> 1680 <refpurpose> 1681 called when a work gets queued 1682 </refpurpose> 1683</refnamediv> 1684<refsynopsisdiv> 1685 <title>Synopsis</title> 1686 <funcsynopsis><funcprototype> 1687 <funcdef>void <function>trace_workqueue_queue_work </function></funcdef> 1688 <paramdef>unsigned int <parameter>req_cpu</parameter></paramdef> 1689 <paramdef>struct pool_workqueue * <parameter>pwq</parameter></paramdef> 1690 <paramdef>struct work_struct * <parameter>work</parameter></paramdef> 1691 </funcprototype></funcsynopsis> 1692</refsynopsisdiv> 1693<refsect1> 1694 <title>Arguments</title> 1695 <variablelist> 1696 <varlistentry> 1697 <term><parameter>req_cpu</parameter></term> 1698 <listitem> 1699 <para> 1700 the requested cpu 1701 </para> 1702 </listitem> 1703 </varlistentry> 1704 <varlistentry> 1705 <term><parameter>pwq</parameter></term> 1706 <listitem> 1707 <para> 1708 pointer to struct pool_workqueue 1709 </para> 1710 </listitem> 1711 </varlistentry> 1712 <varlistentry> 1713 <term><parameter>work</parameter></term> 1714 <listitem> 1715 <para> 1716 pointer to struct work_struct 1717 </para> 1718 </listitem> 1719 </varlistentry> 1720 </variablelist> 1721</refsect1> 1722<refsect1> 1723<title>Description</title> 1724<para> 1725 This event occurs when a work is queued immediately or once a 1726 delayed work is actually queued on a workqueue (ie: once the delay 1727 has been reached). 1728</para> 1729</refsect1> 1730</refentry> 1731 1732<refentry id="API-trace-workqueue-activate-work"> 1733<refentryinfo> 1734 <title>LINUX</title> 1735 <productname>Kernel Hackers Manual</productname> 1736 <date>July 2017</date> 1737</refentryinfo> 1738<refmeta> 1739 <refentrytitle><phrase>trace_workqueue_activate_work</phrase></refentrytitle> 1740 <manvolnum>9</manvolnum> 1741 <refmiscinfo class="version">4.1.27</refmiscinfo> 1742</refmeta> 1743<refnamediv> 1744 <refname>trace_workqueue_activate_work</refname> 1745 <refpurpose> 1746 called when a work gets activated 1747 </refpurpose> 1748</refnamediv> 1749<refsynopsisdiv> 1750 <title>Synopsis</title> 1751 <funcsynopsis><funcprototype> 1752 <funcdef>void <function>trace_workqueue_activate_work </function></funcdef> 1753 <paramdef>struct work_struct * <parameter>work</parameter></paramdef> 1754 </funcprototype></funcsynopsis> 1755</refsynopsisdiv> 1756<refsect1> 1757 <title>Arguments</title> 1758 <variablelist> 1759 <varlistentry> 1760 <term><parameter>work</parameter></term> 1761 <listitem> 1762 <para> 1763 pointer to struct work_struct 1764 </para> 1765 </listitem> 1766 </varlistentry> 1767 </variablelist> 1768</refsect1> 1769<refsect1> 1770<title>Description</title> 1771<para> 1772 This event occurs when a queued work is put on the active queue, 1773 which happens immediately after queueing unless <parameter>max_active</parameter> limit 1774 is reached. 1775</para> 1776</refsect1> 1777</refentry> 1778 1779<refentry id="API-trace-workqueue-execute-start"> 1780<refentryinfo> 1781 <title>LINUX</title> 1782 <productname>Kernel Hackers Manual</productname> 1783 <date>July 2017</date> 1784</refentryinfo> 1785<refmeta> 1786 <refentrytitle><phrase>trace_workqueue_execute_start</phrase></refentrytitle> 1787 <manvolnum>9</manvolnum> 1788 <refmiscinfo class="version">4.1.27</refmiscinfo> 1789</refmeta> 1790<refnamediv> 1791 <refname>trace_workqueue_execute_start</refname> 1792 <refpurpose> 1793 called immediately before the workqueue callback 1794 </refpurpose> 1795</refnamediv> 1796<refsynopsisdiv> 1797 <title>Synopsis</title> 1798 <funcsynopsis><funcprototype> 1799 <funcdef>void <function>trace_workqueue_execute_start </function></funcdef> 1800 <paramdef>struct work_struct * <parameter>work</parameter></paramdef> 1801 </funcprototype></funcsynopsis> 1802</refsynopsisdiv> 1803<refsect1> 1804 <title>Arguments</title> 1805 <variablelist> 1806 <varlistentry> 1807 <term><parameter>work</parameter></term> 1808 <listitem> 1809 <para> 1810 pointer to struct work_struct 1811 </para> 1812 </listitem> 1813 </varlistentry> 1814 </variablelist> 1815</refsect1> 1816<refsect1> 1817<title>Description</title> 1818<para> 1819 Allows to track workqueue execution. 1820</para> 1821</refsect1> 1822</refentry> 1823 1824<refentry id="API-trace-workqueue-execute-end"> 1825<refentryinfo> 1826 <title>LINUX</title> 1827 <productname>Kernel Hackers Manual</productname> 1828 <date>July 2017</date> 1829</refentryinfo> 1830<refmeta> 1831 <refentrytitle><phrase>trace_workqueue_execute_end</phrase></refentrytitle> 1832 <manvolnum>9</manvolnum> 1833 <refmiscinfo class="version">4.1.27</refmiscinfo> 1834</refmeta> 1835<refnamediv> 1836 <refname>trace_workqueue_execute_end</refname> 1837 <refpurpose> 1838 called immediately after the workqueue callback 1839 </refpurpose> 1840</refnamediv> 1841<refsynopsisdiv> 1842 <title>Synopsis</title> 1843 <funcsynopsis><funcprototype> 1844 <funcdef>void <function>trace_workqueue_execute_end </function></funcdef> 1845 <paramdef>struct work_struct * <parameter>work</parameter></paramdef> 1846 </funcprototype></funcsynopsis> 1847</refsynopsisdiv> 1848<refsect1> 1849 <title>Arguments</title> 1850 <variablelist> 1851 <varlistentry> 1852 <term><parameter>work</parameter></term> 1853 <listitem> 1854 <para> 1855 pointer to struct work_struct 1856 </para> 1857 </listitem> 1858 </varlistentry> 1859 </variablelist> 1860</refsect1> 1861<refsect1> 1862<title>Description</title> 1863<para> 1864 Allows to track workqueue execution. 1865</para> 1866</refsect1> 1867</refentry> 1868 1869 </chapter> 1870</book> 1871