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>-&gt;name, and the device id, <parameter>action</parameter>-&gt;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>-&gt;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-&gt;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>-&gt;bio is <constant>NULL</constant>, then there is absolutely no additional work to
786   do for the request. If <parameter>rq</parameter>-&gt;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