linux/kernel/trace/trace_kprobe.c
<<
/opt14./spae=" 14./form=" 14.a /opt14 href="../linux+v3.7.3/kernel/trace/trace_kprobe.c">/opt14.img src="../.static/gfx/right.png" alt=">>">/o./spae="/o.spae class="lxr_search">/opt/opt14.input typ3.1hidden" nam3.1navtarget" v3.1">/opt14.input typ3.1text" nam3.1search" id.1search">/opt14.butt typ3.1submit">Search/opt14Prefs" 14./a>/o./spae="pt14 4./div="pt14 4.form acvale="ajax+*" method="post" onsubmit="return false;">/o.input typ3.1hidden" nam3.1ajax_lookup" id.1ajax_lookup" v3.1">/pt14 4./form="/pt14 4.div class="headingbott m">" .div id.1file_contents"=
4 41./a>.spae class="comment">/*./spae="4 42./a>.spae class="comment"> * Kprobes-based tracing events./spae="4 43./a>.spae class="comment"> *./spae="4 44./a>.spae class="comment"> * Created by Masami Hiramatsu <mhiramat@redhat.com>./spae="4 45./a>.spae class="comment"> *./spae="4 46./a>.spae class="comment"> * This program is free software; you cae redistribute it and/or modify./spae="4 47./a>.spae class="comment"> * it under the terms of the GNU General Public License vers
	  2 as./spae="4 48./a>.spae class="comment"> * published by the Free Software Foundavale../spae="4 49./a>.spae class="comment"> *./spae="4 ptioa>.spae class="comment"> * This program is distributed in the hope that it will be useful,./spae="4 11./a>.spae class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of./spae="4 12./a>.spae class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the./spae="4 13./a>.spae class="comment"> * GNU General Public License for more details../spae="4 14./a>.spae class="comment"> *./spae="4 15./a>.spae class="comment"> * You should have received a copy of the GNU General Public License./spae="4 16./a>.spae class="comment"> * along with this program; if not, write to the Free Software./spae="4 17./a>.spae class="comment"> * Foundavale, Inc., 59 Temple Place, Suite 330, Bostle, MA  02111-1307  USA./spae="4 18./a>.spae class="comment"> */./spae="4 19./a>"4 2tioa>#include <linux/module.hioa>>"4 21ioa>#include <linux/uaccess.hioa>>"4 22./a>"4 23ioa>#include "trace_probe.hioa>""4 24./a>"4 25./a>#define4.a href="+code=KPROBE_EVENT_SYSTEM" class="sref">KPROBE_EVENT_SYSTEM./a> .spae class="string">"kprobes"4 26./a>"4 27./a>.spae class="comment">/**./spae="4 28./a>.spae class="comment"> * Kprobe event core funcvales./spae="4 29./a>.spae class="comment"> */./spae="4 30./a>"4 31ioa>struct4.a href="+code=trace_probe" class="sref">trace_probe./a> {"4 32./a>        struct4.a href="+code=list_head" class="sref">list_head./a>        .a href="+code=list" class="sref">list./a>;"4 33./a>        struct4.a href="+code=kretprobe" class="sref">kretprobe./a>        .a href="+code=rp" class="sref">rp./a>;     .spae class="comment">/* Use rp.kp for kprobe use */./spae="4 34./a>        unsigned long           .a href="+code=nhit" class="sref">nhit./a>;"4 35./a>        unsigned int            .a href="+code=flags" class="sref">flags./a>;  .spae class="comment">/* For TP_FLAG_* */./spae="4 36./a>        clest char              *.a href="+code=symbol" class="sref">symbol./a>;        .spae class="comment">/* symbol nam3 */./spae="4 37./a>        struct4.a href="+code=ftrace_event_class" class="sref">ftrace_event_class./a>       .a href="+code=class" class="sref">class./a>;"4 38./a>        struct4.a href="+code=ftrace_event_call" class="sref">ftrace_event_call./a>        .a href="+code=call" class="sref">call./a>;"4 39./a>        .a href="+code=ssize_t" class="sref">ssize_t./a>                 .a href="+code=size" class="sref">size./a>;           .spae class="comment">/* trace entry size */./spae="4 40./a>        unsigned int            .a href="+code=nr_args" class="sref">nr_args./a>;"4 41./a>        struct4.a href="+code=probe_arg" class="sref">probe_arg./a>        .a href="+code=args" class="sref">args./a>[];"4 42./a>};"4 43./a>"4 44./a>#define4.a href="+code=SIZEOF_TRACE_PROBE" class="sref">SIZEOF_TRACE_PROBE./a>(.a href="+code=n" class="sref">n./a>)                   \"4 45./a>        (.a href="+code=offsetof" class="sref">offsetof./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=args" class="sref">args./a>) +   \"4 46./a>        (sizeof(struct4.a href="+code=probe_arg" class="sref">probe_arg./a>) * (.a href="+code=n" class="sref">n./a>)))"4 47./a>"4 48./a>"4 49ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> int .a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 50./a>{"4 51./a>        return .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=handler" class="sref">handler./a> != .a href="+code=NULL" class="sref">NULL./a>;"4 52./a>}"4 53./a>"4 54ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> clest char *.a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 55./a>{"4 56./a>        return .a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a> ? .a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a> : .spae class="string">"unknown"4 57./a>}"4 58./a>"4 59ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> unsigned long .a href="+code=trace_probe_offset" class="sref">trace_probe_offset./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 60./a>{"4 61./a>        return .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=offset" class="sref">offset./a>;"4 62./a>}"4 63./a>"4 64ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> .a href="+code=bool" class="sref">bool./a> .a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 65./a>{"4 66./a>        return !!(.a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> & (.a href="+code=TP_FLAG_TRACE" class="sref">TP_FLAG_TRACE./a> |4.a href="+code=TP_FLAG_PROFILE" class="sref">TP_FLAG_PROFILE./a>));"4 67./a>}"4 68./a>"4 69ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> .a href="+code=bool" class="sref">bool./a> .a href="+code=trace_probe_is_registered" class="sref">trace_probe_is_registered./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 70./a>{"4 71./a>        return !!(.a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> & .a href="+code=TP_FLAG_REGISTERED" class="sref">TP_FLAG_REGISTERED./a>);"4 72./a>}"4 73./a>"4 74ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> .a href="+code=bool" class="sref">bool./a> .a href="+code=trace_probe_has_gone" class="sref">trace_probe_has_gone./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 75./a>{"4 76./a>        return !!(.a href="+code=kprobe_gone" class="sref">kprobe_gone./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>));"4 77./a>}"4 78./a>"4 79ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> .a href="+code=bool" class="sref">bool./a> .a href="+code=trace_probe_within_module" class="sref">trace_probe_within_module./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>,"4 80./a>                                                struct4.a href="+code=module" class="sref">module./a> *.a href="+code=mod" class="sref">mod./a>)"4 81./a>{"4 82./a>        int .a href="+code=len" class="sref">len./a> = .a href="+code=strlen" class="sref">strlen./a>(.a href="+code=mod" class="sref">mod./a>->.a href="+code=nam3" class="sref">nam3./a>);"4 83./a>        clest char *.a href="+code=nam3" class="sref">nam3./a> = .a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(.a href="+code=tp" class="sref">tp./a>);"4 84./a>        return .a href="+code=strncmp" class="sref">strncmp./a>(.a href="+code=mod" class="sref">mod./a>->.a href="+code=nam3" class="sref">nam3./a>, .a href="+code=nam3" class="sref">nam3./a>, .a href="+code=len" class="sref">len./a>) == 0 && .a href="+code=nam3" class="sref">nam3./a>[.a href="+code=len" class="sref">len./a>] == .spae class="string">':'4 85./a>}"4 86./a>"4 87ioa>static4.a href="+code=__kprobes" class="sref">__kprobes./a> .a href="+code=bool" class="sref">bool./a> .a href="+code=trace_probe_is_on_module" class="sref">trace_probe_is_on_module./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4 88./a>{"4 89./a>        return !!.a href="+code=strchr" class="sref">strchr./a>(.a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(.a href="+code=tp" class="sref">tp./a>), .spae class="string">':'4 90./a>}"4 91./a>"4 92ioa>static4int .a href="+code=register_probe_event" class="sref">register_probe_event./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>);"4 93ioa>static4void4.a href="+code=unregister_probe_event" class="sref">unregister_probe_event./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>);"4 94./a>"4 95ioa>static4.a href="+code=DEFINE_MUTEX" class="sref">DEFINE_MUTEX./a>(.a href="+code=probe_lock" class="sref">probe_lock./a>);"4 96ioa>static4.a href="+code=LIST_HEAD" class="sref">LIST_HEAD./a>(.a href="+code=probe_list" class="sref">probe_list./a>);"4 97./a>"4 98ioa>static4int .a href="+code=kprobe_dispatcher" class="sref">kprobe_dispatcher./a>(struct4.a href="+code=kprobe" class="sref">kprobe./a> *.a href="+code=kp" class="sref">kp./a>, struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>);"4 99ioa>static4int .a href="+code=kretprobe_dispatcher" class="sref">kretprobe_dispatcher./a>(struct4.a href="+code=kretprobe_iestance" class="sref">kretprobe_iestance./a> *.a href="+code=ri" class="sref">ri./a>,"4100./a>                                struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>);"4101./a>"4102./a>.spae class="comment">/*./spae="4103./a>.spae class="comment"> * Allocate new trace_probe and4initialize it (including kprobes)../spae="4104./a>.spae class="comment"> */./spae="4105ioa>static4struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=alloc_trace_probe" class="sref">alloc_trace_probe./a>(clest char *.a href="+code=group" class="sref">group./a>,"4106./a>                                             clest char *.a href="+code=event" class="sref">event./a>,"4107./a>                                             void4*.a href="+code=addr" class="sref">addr./a>,"4108./a>                                             clest char *.a href="+code=symbol" class="sref">symbol./a>,"4109./a>                                             unsigned long .a href="+code=offs" class="sref">offs./a>,"4110./a>                                             int .a href="+code=nargs" class="sref">nargs./a>, .a href="+code=bool" class="sref">bool./a> .a href="+code=is_return" class="sref">is_return./a>)"4111./a>{"4112./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4113./a>        int .a href="+code=ret" class="sref">ret./a> = -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;"4114./a>"4115./a>        .a href="+code=tp" class="sref">tp./a> = .a href="+code=kzalloc" class="sref">kzalloc./a>(.a href="+code=SIZEOF_TRACE_PROBE" class="sref">SIZEOF_TRACE_PROBE./a>(.a href="+code=nargs" class="sref">nargs./a>), .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4116./a>        if (!.a href="+code=tp" class="sref">tp./a>)"4117./a>                return .a href="+code=ERR_PTR" class="sref">ERR_PTR./a>(.a href="+code=ret" class="sref">ret./a>);"4118./a>"4119./a>        if (.a href="+code=symbol" class="sref">symbol./a>) {"4120./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a> = .a href="+code=kstrdup" class="sref">kstrdup./a>(.a href="+code=symbol" class="sref">symbol./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4121./a>                if (!.a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a>)"4122./a>                        goto .a href="+code=error" class="sref">error./a>;"4123./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=symbol_nam3" class="sref">symbol_nam3./a> = .a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a>;"4124./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=offset" class="sref">offset./a> = .a href="+code=offs" class="sref">offs./a>;"4125./a>        } else"4126./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=addr" class="sref">addr./a> = .a href="+code=addr" class="sref">addr./a>;"4127./a>"4128./a>        if (.a href="+code=is_return" class="sref">is_return./a>)"4129./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=handler" class="sref">handler./a> = .a href="+code=kretprobe_dispatcher" class="sref">kretprobe_dispatcher./a>;"4130./a>        else"4131./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=pre_handler" class="sref">pre_handler./a> = .a href="+code=kprobe_dispatcher" class="sref">kprobe_dispatcher./a>;"4132./a>"4133./a>        if (!.a href="+code=event" class="sref">event./a> || !.a href="+code=is_good_nam3" class="sref">is_good_nam3./a>(.a href="+code=event" class="sref">event./a>)) {"4134./a>                .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4135./a>                goto .a href="+code=error" class="sref">error./a>;"4136./a>        }"4137./a>"4138./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=class" class="sref">class./a> = &.a href="+code=tp" class="sref">tp./a>->.a href="+code=class" class="sref">class./a>;"4139./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a> = .a href="+code=kstrdup" class="sref">kstrdup./a>(.a href="+code=event" class="sref">event./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4140./a>        if (!.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>)"4141./a>                goto .a href="+code=error" class="sref">error./a>;"4142./a>"4143./a>        if (!.a href="+code=group" class="sref">group./a> || !.a href="+code=is_good_nam3" class="sref">is_good_nam3./a>(.a href="+code=group" class="sref">group./a>)) {"4144./a>                .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4145./a>                goto .a href="+code=error" class="sref">error./a>;"4146./a>        }"4147./a>"4148./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=class" class="sref">class./a>..a href="+code=system" class="sref">system./a> = .a href="+code=kstrdup" class="sref">kstrdup./a>(.a href="+code=group" class="sref">group./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4149./a>        if (!.a href="+code=tp" class="sref">tp./a>->.a href="+code=class" class="sref">class./a>..a href="+code=system" class="sref">system./a>)"4150./a>                goto .a href="+code=error" class="sref">error./a>;"4151./a>"4152./a>        .a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=list" class="sref">list./a>);"4153./a>        return .a href="+code=tp" class="sref">tp./a>;"4154ioa>.a href="+code=error" class="sref">error./a>:"4155./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>);"4156./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a>);"4157./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>);"4158./a>        return .a href="+code=ERR_PTR" class="sref">ERR_PTR./a>(.a href="+code=ret" class="sref">ret./a>);"4159ioa>}"4160./a>"4161ioa>static4void4.a href="+code=free_trace_probe" class="sref">free_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4162./a>{"4163./a>        int .a href="+code=i" class="sref">i./a>;"4164./a>"4165./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>; .a href="+code=i" class="sref">i./a>++)"4166./a>                .a href="+code=traceprobe_free_probe_arg" class="sref">traceprobe_free_probe_arg./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]);"4167./a>"4168./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=class" class="sref">class./a>->.a href="+code=system" class="sref">system./a>);"4169./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>);"4170./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a>);"4171./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=tp" class="sref">tp./a>);"4172./a>}"4173./a>"4174ioa>static4struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=find_trace_probe" class="sref">find_trace_probe./a>(clest char *.a href="+code=event" class="sref">event./a>,"4175./a>                                            clest char *.a href="+code=group" class="sref">group./a>)"4176./a>{"4177./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4178./a>"4179./a>        .a href="+code=list_for_each_entry" class="sref">list_for_each_entry./a>(.a href="+code=tp" class="sref">tp./a>, &.a href="+code=probe_list" class="sref">probe_list./a>, .a href="+code=list" class="sref">list./a>)"4180./a>                if (.a href="+code=strcmp" class="sref">strcmp./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>, .a href="+code=event" class="sref">event./a>) == 0 &&"4181./a>                    .a href="+code=strcmp" class="sref">strcmp./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=class" class="sref">class./a>->.a href="+code=system" class="sref">system./a>, .a href="+code=group" class="sref">group./a>) == 0)"4182./a>                        return .a href="+code=tp" class="sref">tp./a>;"4183./a>        return .a href="+code=NULL" class="sref">NULL./a>;"4184./a>}"4185./a>"4186./a>.spae class="comment">/* Enable trace_probe - @flag must be TP_FLAG_TRACE or TP_FLAG_PROFILE */./spae="4187ioa>static4int .a href="+code=enable_trace_probe" class="sref">enable_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>,4int .a href="+code=flag" class="sref">flag./a>)"4188./a>{"4189./a>        int .a href="+code=ret" class="sref">ret./a> = 0;"4190./a>"4191./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> |= .a href="+code=flag" class="sref">flag./a>;"4192./a>        if (.a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(.a href="+code=tp" class="sref">tp./a>) && .a href="+code=trace_probe_is_registered" class="sref">trace_probe_is_registered./a>(.a href="+code=tp" class="sref">tp./a>) &&"4193./a>            !.a href="+code=trace_probe_has_gone" class="sref">trace_probe_has_gone./a>(.a href="+code=tp" class="sref">tp./a>)) {"4194./a>                if (.a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(.a href="+code=tp" class="sref">tp./a>))"4195./a>                        .a href="+code=ret" class="sref">ret./a> = .a href="+code=enable_kretprobe" class="sref">enable_kretprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>);"4196./a>                else"4197./a>                        .a href="+code=ret" class="sref">ret./a> = .a href="+code=enable_kprobe" class="sref">enable_kprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>);"4198./a>        }"4199ioa>"4200./a>        return .a href="+code=ret" class="sref">ret./a>;"4201./a>}"4202./a>"4203./a>.spae class="comment">/* Disable trace_probe - @flag must be TP_FLAG_TRACE or TP_FLAG_PROFILE */./spae="4204ioa>static4void4.a href="+code=disable_trace_probe" class="sref">disable_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>,4int .a href="+code=flag" class="sref">flag./a>)"4205./a>{"4206./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> &= ~.a href="+code=flag" class="sref">flag./a>;"4207./a>        if (!.a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(.a href="+code=tp" class="sref">tp./a>) && .a href="+code=trace_probe_is_registered" class="sref">trace_probe_is_registered./a>(.a href="+code=tp" class="sref">tp./a>)) {"4208./a>                if (.a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(.a href="+code=tp" class="sref">tp./a>))"4209./a>                        .a href="+code=disable_kretprobe" class="sref">disable_kretprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>);"4210./a>                else"4211./a>                        .a href="+code=disable_kprobe" class="sref">disable_kprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>);"4212./a>        }"4213./a>}"4214./a>"4215./a>.spae class="comment">/* Internal register function - just handle k*probes and4flags */./spae="4216ioa>static4int .a href="+code=__register_trace_probe" class="sref">__register_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4217./a>{"4218./a>        int .a href="+code=i" class="sref">i./a>, .a href="+code=ret" class="sref">ret./a>;"4219ioa>"4220./a>        if (.a href="+code=trace_probe_is_registered" class="sref">trace_probe_is_registered./a>(.a href="+code=tp" class="sref">tp./a>))"4221./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4222./a>"4223./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>; .a href="+code=i" class="sref">i./a>++)"4224./a>                .a href="+code=traceprobe_update_arg" class="sref">traceprobe_update_arg./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]);"4225./a>"4226./a>        .spae class="comment">/* Set/clear disabled4flag according to tp->flag */./spae="4227./a>        if (.a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(.a href="+code=tp" class="sref">tp./a>))"4228./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=flags" class="sref">flags./a> &= ~.a href="+code=KPROBE_FLAG_DISABLED" class="sref">KPROBE_FLAG_DISABLED./a>;"4229./a>        else"4230./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=flags" class="sref">flags./a> |= .a href="+code=KPROBE_FLAG_DISABLED" class="sref">KPROBE_FLAG_DISABLED./a>;"4231./a>"4232./a>        if (.a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(.a href="+code=tp" class="sref">tp./a>))"4233./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=register_kretprobe" class="sref">register_kretprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>);"4234./a>        else"4235./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=register_kprobe" class="sref">register_kprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>);"4236./a>"4237./a>        if (.a href="+code=ret" class="sref">ret./a> == 0)"4238./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> |= .a href="+code=TP_FLAG_REGISTERED" class="sref">TP_FLAG_REGISTERED./a>;"4239./a>        else {"4240./a>                .a href="+code=pr_warning" class="sref">pr_warning./a>(.spae class="string">"Could not insert probe at %s+%lu: %d\n"./spae=,"4241./a>                           .a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(.a href="+code=tp" class="sref">tp./a>), .a href="+code=trace_probe_offset" class="sref">trace_probe_offset./a>(.a href="+code=tp" class="sref">tp./a>), .a href="+code=ret" class="sref">ret./a>);"4242./a>                if (.a href="+code=ret" class="sref">ret./a> == -.a href="+code=ENOENT" class="sref">ENOENT./a> && .a href="+code=trace_probe_is_on_module" class="sref">trace_probe_is_on_module./a>(.a href="+code=tp" class="sref">tp./a>)) {"4243./a>                        .a href="+code=pr_warning" class="sref">pr_warning./a>(.spae class="string">"This probe might be able to register after"./spae="4244./a>                                   .spae class="string">"target module is loaded. Continue.\n"./spae=);"4245./a>                        .a href="+code=ret" class="sref">ret./a> = 0;"4246./a>                } else if (.a href="+code=ret" class="sref">ret./a> == -.a href="+code=EILSEQ" class="sref">EILSEQ./a>) {"4247./a>                        .a href="+code=pr_warning" class="sref">pr_warning./a>(.spae class="string">"Probing address(0x%p) is not ae "./spae="4248./a>                                   .spae class="string">"iestruction boundary.\n"./spae=,"4249./a>                                   .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=addr" class="sref">addr./a>);"4250./a>                        .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4251./a>                }"4252./a>        }"4253./a>"4254./a>        return .a href="+code=ret" class="sref">ret./a>;"4255./a>}"4256./a>"4257./a>.spae class="comment">/* Internal unregister function - just handle k*probes and4flags */./spae="4258ioa>static4void4.a href="+code=__unregister_trace_probe" class="sref">__unregister_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4259ioa>{"4260./a>        if (.a href="+code=trace_probe_is_registered" class="sref">trace_probe_is_registered./a>(.a href="+code=tp" class="sref">tp./a>)) {"4261./a>                if (.a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(.a href="+code=tp" class="sref">tp./a>))"4262./a>                        .a href="+code=unregister_kretprobe" class="sref">unregister_kretprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>);"4263./a>                else"4264./a>                        .a href="+code=unregister_kprobe" class="sref">unregister_kprobe./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>);"4265./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=flags" class="sref">flags./a> &= ~.a href="+code=TP_FLAG_REGISTERED" class="sref">TP_FLAG_REGISTERED./a>;"4266./a>                .spae class="comment">/* Cleanup kprobe for reuse */./spae="4267./a>                if (.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=symbol_nam3" class="sref">symbol_nam3./a>)"4268./a>                        .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=addr" class="sref">addr./a> = .a href="+code=NULL" class="sref">NULL./a>;"4269./a>        }"4270./a>}"4271./a>"4272./a>.spae class="comment">/* Unregister a trace_probe and4probe_event: call with locking probe_lock */./spae="4273./a>static4int .a href="+code=unregister_trace_probe" class="sref">unregister_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4274ioa>{"4275./a>        .spae class="comment">/* Enabled event can not be unregistered */./spae="4276./a>        if (.a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(.a href="+code=tp" class="sref">tp./a>))"4277./a>                return -.a href="+code=EBUSY" class="sref">EBUSY./a>;"4278./a>"4279./a>        .a href="+code=__unregister_trace_probe" class="sref">__unregister_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4280./a>        .a href="+code=list_del" class="sref">list_del./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=list" class="sref">list./a>);"4281./a>        .a href="+code=unregister_probe_event" class="sref">unregister_probe_event./a>(.a href="+code=tp" class="sref">tp./a>);"4282./a>"4283./a>        return 0;"4284./a>}"4285./a>"4286./a>.spae class="comment">/* Register a trace_probe and4probe_event */./spae="4287ioa>static4int .a href="+code=register_trace_probe" class="sref">register_trace_probe./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>)"4288./a>{"4289./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=old_tp" class="sref">old_tp./a>;"4290./a>        int .a href="+code=ret" class="sref">ret./a>;"4291./a>"4292./a>        .a href="+code=mutex_lock" class="sref">mutex_lock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4293./a>"4294./a>        .spae class="comment">/* Delete old (sam3 nam3) event if exist */./spae="4295./a>        .a href="+code=old_tp" class="sref">old_tp./a> = .a href="+code=find_trace_probe" class="sref">find_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=class" class="sref">class./a>->.a href="+code=system" class="sref">system./a>);"4296./a>        if (.a href="+code=old_tp" class="sref">old_tp./a>) {"4297./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=unregister_trace_probe" class="sref">unregister_trace_probe./a>(.a href="+code=old_tp" class="sref">old_tp./a>);"4298./a>                if (.a href="+code=ret" class="sref">ret./a> < 0)"4299./a>                        goto .a href="+code=end" class="sref">end./a>;"4300./a>                .a href="+code=free_trace_probe" class="sref">free_trace_probe./a>(.a href="+code=old_tp" class="sref">old_tp./a>);"4301./a>        }"4302./a>"4303./a>        .spae class="comment">/* Register new event */./spae="4304./a>        .a href="+code=ret" class="sref">ret./a> = .a href="+code=register_probe_event" class="sref">register_probe_event./a>(.a href="+code=tp" class="sref">tp./a>);"4305./a>        if (.a href="+code=ret" class="sref">ret./a>) {"4306./a>                .a href="+code=pr_warning" class="sref">pr_warning./a>(.spae class="string">"Failed to register probe event(%d)\n"./spae=, .a href="+code=ret" class="sref">ret./a>);"4307./a>                goto .a href="+code=end" class="sref">end./a>;"4308./a>        }"4309ioa>"4310./a>        .spae class="comment">/* Register k*probe */./spae="4311./a>        .a href="+code=ret" class="sref">ret./a> = .a href="+code=__register_trace_probe" class="sref">__register_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4312./a>        if (.a href="+code=ret" class="sref">ret./a> < 0)"4313./a>                .a href="+code=unregister_probe_event" class="sref">unregister_probe_event./a>(.a href="+code=tp" class="sref">tp./a>);"4314./a>        else"4315./a>                .a href="+code=list_add_tail" class="sref">list_add_tail./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=list" class="sref">list./a>, &.a href="+code=probe_list" class="sref">probe_list./a>);"4316./a>"4317./a>.a href="+code=end" class="sref">end./a>:"4318./a>        .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4319./a>        return .a href="+code=ret" class="sref">ret./a>;"4320./a>}"4321./a>"4322./a>.spae class="comment">/* Module notifier call back, checking event on the module */./spae="4323./a>static4int .a href="+code=trace_probe_module_callback" class="sref">trace_probe_module_callback./a>(struct4.a href="+code=notifier_block" class="sref">notifier_block./a> *.a href="+code=nb" class="sref">nb./a>,"4324./a>                                       unsigned long .a href="+code=val" class="sref">val./a>, void4*.a href="+code=data" class="sref">data./a>)"4325./a>{"4326./a>        struct4.a href="+code=module" class="sref">module./a>4*.a href="+code=mod" class="sref">mod./a> = .a href="+code=data" class="sref">data./a>;"4327./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4328./a>        int .a href="+code=ret" class="sref">ret./a>;"4329ioa>"4330./a>        if (.a href="+code=val" class="sref">val./a> != .a href="+code=MODULE_STATE_COMING" class="sref">MODULE_STATE_COMING./a>)"4331./a>                return .a href="+code=NOTIFY_DONE" class="sref">NOTIFY_DONE./a>;"4332./a>"4333./a>        .spae class="comment">/* Update probes on coming module */./spae="4334./a>        .a href="+code=mutex_lock" class="sref">mutex_lock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4335./a>        .a href="+code=list_for_each_entry" class="sref">list_for_each_entry./a>(.a href="+code=tp" class="sref">tp./a>, &.a href="+code=probe_list" class="sref">probe_list./a>, .a href="+code=list" class="sref">list./a>) {"4336./a>                if (.a href="+code=trace_probe_within_module" class="sref">trace_probe_within_module./a>(.a href="+code=tp" class="sref">tp./a>, .a href="+code=mod" class="sref">mod./a>)) {"4337./a>                        .spae class="comment">/* Don't need to check busy - this should have gone. */./spae="4338./a>                        .a href="+code=__unregister_trace_probe" class="sref">__unregister_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4339./a>                        .a href="+code=ret" class="sref">ret./a> = .a href="+code=__register_trace_probe" class="sref">__register_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4340./a>                        if (.a href="+code=ret" class="sref">ret./a>)"4341./a>                                .a href="+code=pr_warning" class="sref">pr_warning./a>(.spae class="string">"Failed to re-register probe %s on"./spae="4342./a>                                           .spae class="string">"%s: %d\n"./spae=,"4343./a>                                           .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>, .a href="+code=mod" class="sref">mod./a>->.a href="+code=nam3" class="sref">nam3./a>, .a href="+code=ret" class="sref">ret./a>);"4344./a>                }"4345./a>        }"4346./a>        .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4347./a>"4348./a>        return .a href="+code=NOTIFY_DONE" class="sref">NOTIFY_DONE./a>;"4349./a>}"4350./a>"4351./a>static4struct4.a href="+code=notifier_block" class="sref">notifier_block./a> .a href="+code=trace_probe_module_nb" class="sref">trace_probe_module_nb./a> = {"4352./a>        ..a href="+code=notifier_call" class="sref">notifier_call./a> = .a href="+code=trace_probe_module_callback" class="sref">trace_probe_module_callback./a>,"4353./a>        ..a href="+code=priority" class="sref">priority./a> = 1   .spae class="comment">/* Invoked after kprobe module callback */./spae="4354./a>};"4355./a>"4356ioa>static4int .a href="+code=create_trace_probe" class="sref">create_trace_probe./a>(int .a href="+code=argc" class="sref">argc./a>, char **.a href="+code=argv" class="sref">argv./a>)"4357./a>{"4358./a>        .spae class="comment">/*./spae="4359ioa>.spae class="comment">         * Argument syntax:./spae="4360./a>.spae class="comment">         *  - Add kprobe: p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS]./spae="4361./a>.spae class="comment">         *  - Add kretprobe: r[:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS]./spae="4362./a>.spae class="comment">         * Fetch args:./spae="4363./a>.spae class="comment">         *  $retval     : fetch return value./spae="4364./a>.spae class="comment">         *  $stack      : fetch stack address./spae="4365./a>.spae class="comment">         *  $stackN     : fetch Nth of stack (N:0-)./spae="4366./a>.spae class="comment">         *  @ADDR       : fetch memory at ADDR (ADDR should be in kernel)./spae="4367./a>.spae class="comment">         *  @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol)./spae="4368./a>.spae class="comment">         *  %REG        : fetch register REG./spae="4369ioa>.spae class="comment">         * Dereferencing memory fetch:./spae="4370./a>.spae class="comment">         *  +|-offs(ARG) : fetch memory at ARG +|- offs address../spae="4371./a>.spae class="comment">         * Alias nam3 of args:./spae="4372./a>.spae class="comment">         *  NAME=FETCHARG : set NAME as alias of FETCHARG../spae="4373./a>.spae class="comment">         * Typ3 of args:./spae="4374./a>.spae class="comment">         *  FETCHARG:TYPE : use TYPE iestead of unsigned long../spae="4375./a>.spae class="comment">         */./spae="4376./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4377./a>        int .a href="+code=i" class="sref">i./a>, .a href="+code=ret" class="sref">ret./a> = 0;"4378./a>        .a href="+code=bool" class="sref">bool./a> .a href="+code=is_return" class="sref">is_return./a> = .a href="+code=false" class="sref">false./a>, .a href="+code=is_delete" class="sref">is_delete./a> = .a href="+code=false" class="sref">false./a>;"4379./a>        char *.a href="+code=symbol" class="sref">symbol./a> = .a href="+code=NULL" class="sref">NULL./a>, *.a href="+code=event" class="sref">event./a> = .a href="+code=NULL" class="sref">NULL./a>, *.a href="+code=group" class="sref">group./a> = .a href="+code=NULL" class="sref">NULL./a>;"4380./a>        char *.a href="+code=arg" class="sref">arg./a>;"4381./a>        unsigned long .a href="+code=offset" class="sref">offset./a> = 0;"4382./a>        void4*.a href="+code=addr" class="sref">addr./a> = .a href="+code=NULL" class="sref">NULL./a>;"4383./a>        char .a href="+code=buf" class="sref">buf./a>[.a href="+code=MAX_EVENT_NAME_LEN" class="sref">MAX_EVENT_NAME_LEN./a>];"4384./a>"4385./a>        .spae class="comment">/* argc must be >= 1 */./spae="4386./a>        if (.a href="+code=argv" class="sref">argv./a>[0][0] == .spae class="string">'p'./spae=)"4387./a>                .a href="+code=is_return" class="sref">is_return./a> = .a href="+code=false" class="sref">false./a>;"4388./a>        else if (.a href="+code=argv" class="sref">argv./a>[0][0] == .spae class="string">'r'./spae=)"4389./a>                .a href="+code=is_return" class="sref">is_return./a> = .a href="+code=true" class="sref">true./a>;"4390./a>        else if (.a href="+code=argv" class="sref">argv./a>[0][0] == .spae class="string">'-'./spae=)"4391./a>                .a href="+code=is_delete" class="sref">is_delete./a> = .a href="+code=true" class="sref">true./a>;"4392./a>        else {"4393./a>                .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Probe definition must be started with 'p', 'r' or"./spae="4394./a>                        .spae class="string">" '-'.\n"./spae=);"4395./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4396./a>        }"4397./a>"4398./a>        if (.a href="+code=argv" class="sref">argv./a>[0][1] == .spae class="string">':'./spae=) {"4399./a>                .a href="+code=event" class="sref">event./a> = &.a href="+code=argv" class="sref">argv./a>[0][2];"4400./a>                if (.a href="+code=strchr" class="sref">strchr./a>(.a href="+code=event" class="sref">event./a>, .spae class="string">'/'./spae=)) {"4401./a>                        .a href="+code=group" class="sref">group./a> = .a href="+code=event" class="sref">event./a>;"4402./a>                        .a href="+code=event" class="sref">event./a> = .a href="+code=strchr" class="sref">strchr./a>(.a href="+code=group" class="sref">group./a>, .spae class="string">'/'./spae=) + 1;"4403./a>                        .a href="+code=event" class="sref">event./a>[-1] = .spae class="string">'\0'./spae=;"4404./a>                        if (.a href="+code=strlen" class="sref">strlen./a>(.a href="+code=group" class="sref">group./a>) == 0) {"4405./a>                                .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Group nam3 is not specified\n"./spae=);"4406./a>                                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4407./a>                        }"4408./a>                }"4409./a>                if (.a href="+code=strlen" class="sref">strlen./a>(.a href="+code=event" class="sref">event./a>) == 0) {"4410./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Event nam3 is not specified\n"./spae=);"4411./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4412./a>                }"4413./a>        }"4414./a>        if (!.a href="+code=group" class="sref">group./a>)"4415./a>                .a href="+code=group" class="sref">group./a> = .a href="+code=KPROBE_EVENT_SYSTEM" class="sref">KPROBE_EVENT_SYSTEM./a>;"4416./a>"4417./a>        if (.a href="+code=is_delete" class="sref">is_delete./a>) {"4418./a>                if (!.a href="+code=event" class="sref">event./a>) {"4419./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Delete command4needs an event nam3.\n"./spae=);"4420./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4421./a>                }"4422./a>                .a href="+code=mutex_lock" class="sref">mutex_lock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4423./a>                .a href="+code=tp" class="sref">tp./a> = .a href="+code=find_trace_probe" class="sref">find_trace_probe./a>(.a href="+code=event" class="sref">event./a>, .a href="+code=group" class="sref">group./a>);"4424./a>                if (!.a href="+code=tp" class="sref">tp./a>) {"4425./a>                        .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4426./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Event %s/%s doesn't exist.\n"./spae=, .a href="+code=group" class="sref">group./a>, .a href="+code=event" class="sref">event./a>);"4427./a>                        return -.a href="+code=ENOENT" class="sref">ENOENT./a>;"4428./a>                }"4429./a>                .spae class="comment">/* delete an event */./spae="4430./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=unregister_trace_probe" class="sref">unregister_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4431./a>                if (.a href="+code=ret" class="sref">ret./a> == 0)"4432./a>                        .a href="+code=free_trace_probe" class="sref">free_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4433./a>                .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4434./a>                return .a href="+code=ret" class="sref">ret./a>;"4435./a>        }"4436./a>"4437./a>        if (.a href="+code=argc" class="sref">argc./a> < 2) {"4438./a>                .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Probe point is not specified.\n"./spae=);"4439./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4440./a>        }"4441./a>        if (.a href="+code=isdigit" class="sref">isdigit./a>(.a href="+code=argv" class="sref">argv./a>[1][0])) {"4442./a>                if (.a href="+code=is_return" class="sref">is_return./a>) {"4443./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Return probe point must be a symbol.\n"./spae=);"4444./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4445./a>                }"4446./a>                .spae class="comment">/* ae address specified */./spae="4447./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=strict_strtoul" class="sref">strict_strtoul./a>(&.a href="+code=argv" class="sref">argv./a>[1][0], 0, (unsigned long *)&.a href="+code=addr" class="sref">addr./a>);"4448./a>                if (.a href="+code=ret" class="sref">ret./a>) {"4449./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Failed to parse address.\n"./spae=);"4450./a>                        return .a href="+code=ret" class="sref">ret./a>;"4451./a>                }"4452./a>        } else {"4453./a>                .spae class="comment">/* a symbol specified */./spae="4454./a>                .a href="+code=symbol" class="sref">symbol./a> = .a href="+code=argv" class="sref">argv./a>[1];"4455./a>                .spae class="comment">/* TODO: support .init module functions */./spae="4456./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=traceprobe_split_symbol_offset" class="sref">traceprobe_split_symbol_offset./a>(.a href="+code=symbol" class="sref">symbol./a>, &.a href="+code=offset" class="sref">offset./a>);"4457./a>                if (.a href="+code=ret" class="sref">ret./a>) {"4458./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Failed to parse symbol.\n"./spae=);"4459./a>                        return .a href="+code=ret" class="sref">ret./a>;"4460./a>                }"4461./a>                if (.a href="+code=offset" class="sref">offset./a> && .a href="+code=is_return" class="sref">is_return./a>) {"4462./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Return probe must be used without offset.\n"./spae=);"4463./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4464./a>                }"4465./a>        }"4466./a>        .a href="+code=argc" class="sref">argc./a> -= 2; .a href="+code=argv" class="sref">argv./a> += 2;"4467./a>"4468./a>        .spae class="comment">/* setup a probe */./spae="4469./a>        if (!.a href="+code=event" class="sref">event./a>) {"4470./a>                .spae class="comment">/* Make a new event nam3 */./spae="4471./a>                if (.a href="+code=symbol" class="sref">symbol./a>)"4472./a>                        .a href="+code=snprintf" class="sref">snprintf./a>(.a href="+code=buf" class="sref">buf./a>, .a href="+code=MAX_EVENT_NAME_LEN" class="sref">MAX_EVENT_NAME_LEN./a>, .spae class="string">"%c_%s_%ld"./spae=,"4473./a>                                 .a href="+code=is_return" class="sref">is_return./a> ? .spae class="string">'r'./spae= : .spae class="string">'p'./spae=, .a href="+code=symbol" class="sref">symbol./a>, .a href="+code=offset" class="sref">offset./a>);"4474./a>                else"4475./a>                        .a href="+code=snprintf" class="sref">snprintf./a>(.a href="+code=buf" class="sref">buf./a>, .a href="+code=MAX_EVENT_NAME_LEN" class="sref">MAX_EVENT_NAME_LEN./a>, .spae class="string">"%c_0x%p"./spae=,"4476./a>                                 .a href="+code=is_return" class="sref">is_return./a> ? .spae class="string">'r'./spae= : .spae class="string">'p'./spae=, .a href="+code=addr" class="sref">addr./a>);"4477./a>                .a href="+code=event" class="sref">event./a> = .a href="+code=buf" class="sref">buf./a>;"4478./a>        }"4479./a>        .a href="+code=tp" class="sref">tp./a> = .a href="+code=alloc_trace_probe" class="sref">alloc_trace_probe./a>(.a href="+code=group" class="sref">group./a>, .a href="+code=event" class="sref">event./a>, .a href="+code=addr" class="sref">addr./a>, .a href="+code=symbol" class="sref">symbol./a>, .a href="+code=offset" class="sref">offset./a>, .a href="+code=argc" class="sref">argc./a>,"4480./a>                               .a href="+code=is_return" class="sref">is_return./a>);"4481./a>        if (.a href="+code=IS_ERR" class="sref">IS_ERR./a>(.a href="+code=tp" class="sref">tp./a>)) {"4482./a>                .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Failed to allocate trace_probe.(%d)\n"./spae=,"4483./a>                        (int).a href="+code=PTR_ERR" class="sref">PTR_ERR./a>(.a href="+code=tp" class="sref">tp./a>));"4484./a>                return .a href="+code=PTR_ERR" class="sref">PTR_ERR./a>(.a href="+code=tp" class="sref">tp./a>);"4485./a>        }"4486./a>"4487./a>        .spae class="comment">/* parse arguments */./spae="4488./a>        .a href="+code=ret" class="sref">ret./a> = 0;"4489./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=argc" class="sref">argc./a> && .a href="+code=i" class="sref">i./a> < .a href="+code=MAX_TRACE_ARGS" class="sref">MAX_TRACE_ARGS./a>; .a href="+code=i" class="sref">i./a>++) {"4490./a>                .spae class="comment">/* Increment count for freeing args in error cas3 */./spae="4491./a>                .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>++;"4492./a>"4493./a>                .spae class="comment">/* Parse argument nam3 */./spae="4494./a>                .a href="+code=arg" class="sref">arg./a> = .a href="+code=strchr" class="sref">strchr./a>(.a href="+code=argv" class="sref">argv./a>[.a href="+code=i" class="sref">i./a>], .spae class="string">'='./spae=);"4495./a>                if (.a href="+code=arg" class="sref">arg./a>) {"4496./a>                        *.a href="+code=arg" class="sref">arg./a>++ = .spae class="string">'\0'./spae=;"4497./a>                        .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a> = .a href="+code=kstrdup" class="sref">kstrdup./a>(.a href="+code=argv" class="sref">argv./a>[.a href="+code=i" class="sref">i./a>], .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4498./a>                } else {"4499./a>                        .a href="+code=arg" class="sref">arg./a> = .a href="+code=argv" class="sref">argv./a>[.a href="+code=i" class="sref">i./a>];"4500./a>                        .spae class="comment">/* If argument nam3 is omitted, set "argN" */./spae="4501./a>                        .a href="+code=snprintf" class="sref">snprintf./a>(.a href="+code=buf" class="sref">buf./a>, .a href="+code=MAX_EVENT_NAME_LEN" class="sref">MAX_EVENT_NAME_LEN./a>, .spae class="string">"arg%d"./spae=, .a href="+code=i" class="sref">i./a> + 1);"4502./a>                        .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a> = .a href="+code=kstrdup" class="sref">kstrdup./a>(.a href="+code=buf" class="sref">buf./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);"4503./a>                }"4504./a>"4505./a>                if (!.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a>) {"4506./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Failed to allocate argument[%d] nam3.\n"./spae=, .a href="+code=i" class="sref">i./a>);"4507./a>                        .a href="+code=ret" class="sref">ret./a> = -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;"4508./a>                        goto .a href="+code=error" class="sref">error./a>;"4509./a>                }"4510./a>"4511./a>                if (!.a href="+code=is_good_nam3" class="sref">is_good_nam3./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a>)) {"4512./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Invalid argument[%d] nam3: %s\n"./spae=,"4513./a>                                .a href="+code=i" class="sref">i./a>, .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a>);"4514./a>                        .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4515./a>                        goto .a href="+code=error" class="sref">error./a>;"4516./a>                }"4517./a>"4518./a>                if (.a href="+code=traceprobe_conflict_field_nam3" class="sref">traceprobe_conflict_field_nam3./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a>,"4519./a>                                                        .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>, .a href="+code=i" class="sref">i./a>)) {"4520./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Argument[%d] nam3 '%s' conflicts with "./spae="4521./a>                                .spae class="string">"another field.\n"./spae=, .a href="+code=i" class="sref">i./a>, .a href="+code=argv" class="sref">argv./a>[.a href="+code=i" class="sref">i./a>]);"4522./a>                        .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EINVAL" class="sref">EINVAL./a>;"4523./a>                        goto .a href="+code=error" class="sref">error./a>;"4524./a>                }"4525./a>"4526./a>                .spae class="comment">/* Parse fetch argument */./spae="4527./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=traceprobe_parse_probe_arg" class="sref">traceprobe_parse_probe_arg./a>(.a href="+code=arg" class="sref">arg./a>, &.a href="+code=tp" class="sref">tp./a>->.a href="+code=siz3" class="sref">siz3./a>, &.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>],"4528./a>                                                .a href="+code=is_return" class="sref">is_return./a>, .a href="+code=true" class="sref">true./a>);"4529./a>                if (.a href="+code=ret" class="sref">ret./a>) {"4530./a>                        .a href="+code=pr_info" class="sref">pr_info./a>(.spae class="string">"Parse error at argument[%d]. (%d)\n"./spae=, .a href="+code=i" class="sref">i./a>, .a href="+code=ret" class="sref">ret./a>);"4531./a>                        goto .a href="+code=error" class="sref">error./a>;"4532./a>                }"4533./a>        }"4534./a>"4535./a>        .a href="+code=ret" class="sref">ret./a> = .a href="+code=register_trace_probe" class="sref">register_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4536./a>        if (.a href="+code=ret" class="sref">ret./a>)"4537./a>                goto .a href="+code=error" class="sref">error./a>;"4538./a>        return 0;"4539./a>"4540./a>.a href="+code=error" class="sref">error./a>:"4541./a>        .a href="+code=free_trace_probe" class="sref">free_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4542./a>        return .a href="+code=ret" class="sref">ret./a>;"4543./a>}"4544./a>"4545./a>static int .a href="+code=release_all_trace_probes" class="sref">release_all_trace_probes./a>(void)"4546./a>{"4547./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4548./a>        int .a href="+code=ret" class="sref">ret./a> = 0;"4549./a>"4550./a>        .a href="+code=mutex_lock" class="sref">mutex_lock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4551./a>        .spae class="comment">/* Ensure no probe is in use. */./spae="4552./a>        .a href="+code=list_for_each_entry" class="sref">list_for_each_entry./a>(.a href="+code=tp" class="sref">tp./a>, &.a href="+code=probe_list" class="sref">probe_list./a>, .a href="+code=list" class="sref">list./a>)"4553./a>                if (.a href="+code=trace_probe_is_enabled" class="sref">trace_probe_is_enabled./a>(.a href="+code=tp" class="sref">tp./a>)) {"4554./a>                        .a href="+code=ret" class="sref">ret./a> = -.a href="+code=EBUSY" class="sref">EBUSY./a>;"4555./a>                        goto .a href="+code=end" class="sref">end./a>;"4556./a>                }"4557./a>        .spae class="comment">/* TODO: Use batch unregistration */./spae="4558./a>        while (!.a href="+code=list_empty" class="sref">list_empty./a>(&.a href="+code=probe_list" class="sref">probe_list./a>)) {"4559./a>                .a href="+code=tp" class="sref">tp./a> = .a href="+code=list_entry" class="sref">list_entry./a>(.a href="+code=probe_list" class="sref">probe_list./a>..a href="+code=next" class="sref">next./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=list" class="sref">list./a>);"4560./a>                .a href="+code=unregister_trace_probe" class="sref">unregister_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4561./a>                .a href="+code=free_trace_probe" class="sref">free_trace_probe./a>(.a href="+code=tp" class="sref">tp./a>);"4562./a>        }"4563./a>"4564./a>.a href="+code=end" class="sref">end./a>:"4565./a>        .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4566./a>"4567./a>        return .a href="+code=ret" class="sref">ret./a>;"4568./a>}"4569./a>"4570./a>.spae class="comment">/* Probes listing interfaces */./spae="4571./a>static void *.a href="+code=probes_seq_start" class="sref">probes_seq_start./a>(struct4.a href="+code=seq_file" class="sref">seq_file./a> *.a href="+code=m" class="sref">m./a>, .a href="+code=loff_t" class="sref">loff_t./a> *.a href="+code=pos" class="sref">pos./a>)"4572./a>{"4573./a>        .a href="+code=mutex_lock" class="sref">mutex_lock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4574./a>        return .a href="+code=seq_list_start" class="sref">seq_list_start./a>(&.a href="+code=probe_list" class="sref">probe_list./a>, *.a href="+code=pos" class="sref">pos./a>);"4575./a>}"4576./a>"4577./a>static void *.a href="+code=probes_seq_next" class="sref">probes_seq_next./a>(struct4.a href="+code=seq_file" class="sref">seq_file./a> *.a href="+code=m" class="sref">m./a>, void *.a href="+code=v" class="sref">v./a>, .a href="+code=loff_t" class="sref">loff_t./a> *.a href="+code=pos" class="sref">pos./a>)"4578./a>{"4579./a>        return .a href="+code=seq_list_next" class="sref">seq_list_next./a>(.a href="+code=v" class="sref">v./a>, &.a href="+code=probe_list" class="sref">probe_list./a>, .a href="+code=pos" class="sref">pos./a>);"4580./a>}"4581./a>"4582./a>static void .a href="+code=probes_seq_stop" class="sref">probes_seq_stop./a>(struct4.a href="+code=seq_file" class="sref">seq_file./a> *.a href="+code=m" class="sref">m./a>, void *.a href="+code=v" class="sref">v./a>)"4583./a>{"4584./a>        .a href="+code=mutex_unlock" class="sref">mutex_unlock./a>(&.a href="+code=probe_lock" class="sref">probe_lock./a>);"4585./a>}"4586./a>"4587./a>static int .a href="+code=probes_seq_show" class="sref">probes_seq_show./a>(struct4.a href="+code=seq_file" class="sref">seq_file./a> *.a href="+code=m" class="sref">m./a>, void *.a href="+code=v" class="sref">v./a>)"4588./a>{"4589./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a> = .a href="+code=v" class="sref">v./a>;"4590./a>        int .a href="+code=i" class="sref">i./a>;"4591./a>"4592./a>        .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">"%c"./spae=, .a href="+code=trace_probe_is_return" class="sref">trace_probe_is_return./a>(.a href="+code=tp" class="sref">tp./a>) ? .spae class="string">'r'./spae= : .spae class="string">'p'./spae=);"4593./a>        .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">":%s/%s"./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=class" class="sref">class./a>->.a href="+code=system" class="sref">system./a>, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>);"4594./a>"4595./a>        if (!.a href="+code=tp" class="sref">tp./a>->.a href="+code=symbol" class="sref">symbol./a>)"4596./a>                .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">" 0x%p"./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=addr" class="sref">addr./a>);"4597./a>        else if (.a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=offset" class="sref">offset./a>)"4598./a>                .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">" %s+%u"./spae=, .a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(.a href="+code=tp" class="sref">tp./a>),"4599./a>                           .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=offset" class="sref">offset./a>);"4600./a>        else"4601./a>                .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">" %s"./spae=, .a href="+code=trace_probe_symbol" class="sref">trace_probe_symbol./a>(.a href="+code=tp" class="sref">tp./a>));"4602./a>"4603./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>; .a href="+code=i" class="sref">i./a>++)"4604./a>                .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">" %s=%s"./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=nam3" class="sref">nam3./a>, .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=comm" class="sref">comm./a>);"4605./a>        .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">"\n"./spae=);"4606./a>"4607./a>        return 0;"4608./a>}"4609./a>"4610./a>static const struct4.a href="+code=seq_operations" class="sref">seq_operations./a> .a href="+code=probes_seq_op" class="sref">probes_seq_op./a> = {"4611./a>        ..a href="+code=start" class="sref">start./a>  = .a href="+code=probes_seq_start" class="sref">probes_seq_start./a>,"4612./a>        ..a href="+code=next" class="sref">next./a>   = .a href="+code=probes_seq_next" class="sref">probes_seq_next./a>,"4613./a>        ..a href="+code=stop" class="sref">stop./a>   = .a href="+code=probes_seq_stop" class="sref">probes_seq_stop./a>,"4614./a>        ..a href="+code=show" class="sref">show./a>   = .a href="+code=probes_seq_show" class="sref">probes_seq_show./a>"4615./a>};"4616./a>"4617./a>static int .a href="+code=probes_open" class="sref">probes_open./a>(struct4.a href="+code=inode" class="sref">inode./a> *.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=file" class="sref">file./a> *.a href="+code=file" class="sref">file./a>)"4618./a>{"4619./a>        int .a href="+code=ret" class="sref">ret./a>;"4620./a>"4621./a>        if ((.a href="+code=file" class="sref">file./a>->.a href="+code=f_mode" class="sref">f_mode./a> & .a href="+code=FMODE_WRITE" class="sref">FMODE_WRITE./a>) && (.a href="+code=file" class="sref">file./a>->.a href="+code=f_flags" class="sref">f_flags./a> & .a href="+code=O_TRUNC" class="sref">O_TRUNC./a>)) {"4622./a>                .a href="+code=ret" class="sref">ret./a> = .a href="+code=release_all_trace_probes" class="sref">release_all_trace_probes./a>();"4623./a>                if (.a href="+code=ret" class="sref">ret./a> < 0)"4624./a>                        return .a href="+code=ret" class="sref">ret./a>;"4625./a>        }"4626./a>"4627./a>        return .a href="+code=seq_open" class="sref">seq_open./a>(.a href="+code=file" class="sref">file./a>, &.a href="+code=probes_seq_op" class="sref">probes_seq_op./a>);"4628./a>}"4629./a>"4630./a>static .a href="+code=ssiz3_t" class="sref">ssiz3_t./a> .a href="+code=probes_write" class="sref">probes_write./a>(struct4.a href="+code=file" class="sref">file./a> *.a href="+code=file" class="sref">file./a>, const char4.a href="+code=__user" class="sref">__user./a> *.a href="+code=buffer" class="sref">buffer./a>,"4631./a>                            .a href="+code=siz3_t" class="sref">siz3_t./a> .a href="+code=count" class="sref">count./a>, .a href="+code=loff_t" class="sref">loff_t./a> *.a href="+code=ppos" class="sref">ppos./a>)"4632./a>{"4633./a>        return .a href="+code=traceprobe_probes_write" class="sref">traceprobe_probes_write./a>(.a href="+code=file" class="sref">file./a>, .a href="+code=buffer" class="sref">buffer./a>, .a href="+code=count" class="sref">count./a>, .a href="+code=ppos" class="sref">ppos./a>,"4634./a>                        .a href="+code=create_trace_probe" class="sref">create_trace_probe./a>);"4635./a>}"4636./a>"4637./a>static const struct4.a href="+code=file_operations" class="sref">file_operations./a> .a href="+code=kprobe_events_ops" class="sref">kprobe_events_ops./a> = {"4638./a>        ..a href="+code=owner" class="sref">owner./a>          = .a href="+code=THIS_MODULE" class="sref">THIS_MODULE./a>,"4639./a>        ..a href="+code=open" class="sref">open./a>           = .a href="+code=probes_open" class="sref">probes_open./a>,"4640./a>        ..a href="+code=read" class="sref">read./a>           = .a href="+code=seq_read" class="sref">seq_read./a>,"4641./a>        ..a href="+code=llseek" class="sref">llseek./a>         = .a href="+code=seq_lseek" class="sref">seq_lseek./a>,"4642./a>        ..a href="+code=release" class="sref">release./a>        = .a href="+code=seq_release" class="sref">seq_release./a>,"4643./a>        ..a href="+code=write" class="sref">write./a>          = .a href="+code=probes_write" class="sref">probes_write./a>,"4644./a>};"4645./a>"4646./a>.spae class="comment">/* Probes profiling interfaces */./spae="4647./a>static int .a href="+code=probes_profile_seq_show" class="sref">probes_profile_seq_show./a>(struct4.a href="+code=seq_file" class="sref">seq_file./a> *.a href="+code=m" class="sref">m./a>, void *.a href="+code=v" class="sref">v./a>)"4648./a>{"4649./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a> = .a href="+code=v" class="sref">v./a>;"4650./a>"4651./a>        .a href="+code=seq_printf" class="sref">seq_printf./a>(.a href="+code=m" class="sref">m./a>, .spae class="string">"  %-44s %15lu %15lu\n"./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>, .a href="+code=tp" class="sref">tp./a>->.a href="+code=nhit" class="sref">nhit./a>,"4652./a>                   .a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=nmissed" class="sref">nmissed./a>);"4653./a>"4654./a>        return 0;"4655./a>}"4656./a>"4657./a>static const struct4.a href="+code=seq_operations" class="sref">seq_operations./a> .a href="+code=profile_seq_op" class="sref">profile_seq_op./a> = {"4658./a>        ..a href="+code=start" class="sref">start./a>  = .a href="+code=probes_seq_start" class="sref">probes_seq_start./a>,"4659./a>        ..a href="+code=next" class="sref">next./a>   = .a href="+code=probes_seq_next" class="sref">probes_seq_next./a>,"4660./a>        ..a href="+code=stop" class="sref">stop./a>   = .a href="+code=probes_seq_stop" class="sref">probes_seq_stop./a>,"4661./a>        ..a href="+code=show" class="sref">show./a>   = .a href="+code=probes_profile_seq_show" class="sref">probes_profile_seq_show./a>"4662./a>};"4663./a>"4664./a>static int .a href="+code=profile_open" class="sref">profile_open./a>(struct4.a href="+code=inode" class="sref">inode./a> *.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=file" class="sref">file./a> *.a href="+code=file" class="sref">file./a>)"4665./a>{"4666./a>        return .a href="+code=seq_open" class="sref">seq_open./a>(.a href="+code=file" class="sref">file./a>, &.a href="+code=profile_seq_op" class="sref">profile_seq_op./a>);"4667./a>}"4668./a>"4669./a>static const struct4.a href="+code=file_operations" class="sref">file_operations./a> .a href="+code=kprobe_profile_ops" class="sref">kprobe_profile_ops./a> = {"4670./a>        ..a href="+code=owner" class="sref">owner./a>          = .a href="+code=THIS_MODULE" class="sref">THIS_MODULE./a>,"4671./a>        ..a href="+code=open" class="sref">open./a>           = .a href="+code=profile_open" class="sref">profile_open./a>,"4672./a>        ..a href="+code=read" class="sref">read./a>           = .a href="+code=seq_read" class="sref">seq_read./a>,"4673./a>        ..a href="+code=llseek" class="sref">llseek./a>         = .a href="+code=seq_lseek" class="sref">seq_lseek./a>,"4674./a>        ..a href="+code=release" class="sref">release./a>        = .a href="+code=seq_release" class="sref">seq_release./a>,"4675./a>};"4676./a>"4677./a>.spae class="comment">/* Sum up total data length for dynamic arraies (strings) */./spae="4678./a>static .a href="+code=__kprobes" class="sref">__kprobes./a> int .a href="+code=__get_data_siz3" class="sref">__get_data_siz3./a>(struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>,"4679./a>                                     struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>)"4680./a>{"4681./a>        int .a href="+code=i" class="sref">i./a>, .a href="+code=ret" class="sref">ret./a> = 0;"4682./a>        .a href="+code=u32" class="sref">u32./a> .a href="+code=len" class="sref">len./a>;"4683./a>"4684./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>; .a href="+code=i" class="sref">i./a>++)"4685./a>                if (.a href="+code=unlikely" class="sref">unlikely./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=fetch_siz3" class="sref">fetch_siz3./a>..a href="+code=fn" class="sref">fn./a>)) {"4686./a>                        .a href="+code=call_fetch" class="sref">call_fetch./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=fetch_siz3" class="sref">fetch_siz3./a>, .a href="+code=regs" class="sref">regs./a>, &.a href="+code=len" class="sref">len./a>);"4687./a>                        .a href="+code=ret" class="sref">ret./a> += .a href="+code=len" class="sref">len./a>;"4688./a>                }"4689./a>"4690./a>        return .a href="+code=ret" class="sref">ret./a>;"4691./a>}"4692./a>"4693./a>.spae class="comment">/* Store the value of each argument */./spae="4694./a>static .a href="+code=__kprobes" class="sref">__kprobes./a> void .a href="+code=store_trace_args" class="sref">store_trace_args./a>(int .a href="+code=ent_siz3" class="sref">ent_siz3./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>,"4695./a>                                       struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>,"4696./a>                                       .a href="+code=u8" class="sref">u8./a> *.a href="+code=data" class="sref">data./a>, int .a href="+code=maxlen" class="sref">maxlen./a>)"4697./a>{"4698./a>        int .a href="+code=i" class="sref">i./a>;"4699./a>        .a href="+code=u32" class="sref">u32./a> .a href="+code=end" class="sref">end./a> = .a href="+code=tp" class="sref">tp./a>->.a href="+code=siz3" class="sref">siz3./a>;"4700./a>        .a href="+code=u32" class="sref">u32./a> *.a href="+code=dl" class="sref">dl./a>;        .spae class="comment">/* Data (relative) location */./spae="4701./a>"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">nr_args./a>; .a href="+code=i" class="sref">i./a>++) {"4703./a>                if (.a href="+code=unlikely" class="sref">unlikely./a>(.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=fetch_siz3" class="sref">fetch_siz3./a>..a href="+code=fn" class="sref">fn./a>)) {"4704./a>                        .spae class="comment">/*./spae="4705./a>.spae class="comment">                         * First, we set the relative location and./spae="4706./a>.spae class="comment">                         * maximum data length to *dl./spae="4707./a>.spae class="comment">                         */./spae="4708./a>                        .a href="+code=dl" class="sref">dl./a> = (.a href="+code=u32" class="sref">u32./a> *)(.a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=offset" class="sref">offset./a>);"4709./a>                        *.a href="+code=dl" class="sref">dl./a> = .a href="+code=make_data_rloc" class="sref">make_data_rloc./a>(.a href="+code=maxlen" class="sref">maxlen./a>, .a href="+code=end" class="sref">end./a> - .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=offset" class="sref">offset./a>);"4710./a>                        .spae class="comment">/* Then try to fetch string or dynamic array data */./spae="4711./a>                        .a href="+code=call_fetch" class="sref">call_fetch./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=fetch" class="sref">fetch./a>, .a href="+code=regs" class="sref">regs./a>, .a href="+code=dl" class="sref">dl./a>);"4712./a>                        .spae class="comment">/* Reduce maximum length */./spae="4713./a>                        .a href="+code=end" class="sref">end./a> += .a href="+code=get_rloc_len" class="sref">get_rloc_len./a>(*.a href="+code=dl" class="sref">dl./a>);"4714./a>                        .a href="+code=maxlen" class="sref">maxlen./a> -= .a href="+code=get_rloc_len" class="sref">get_rloc_len./a>(*.a href="+code=dl" class="sref">dl./a>);"4715./a>                        .spae class="comment">/* Trick here, convert data_rloc to data_loc */./spae="4716./a>                        *.a href="+code=dl" class="sref">dl./a> = .a href="+code=convert_rloc_to_loc" class="sref">convert_rloc_to_loc./a>(*.a href="+code=dl" class="sref">dl./a>,"4717./a>                                 .a href="+code=ent_siz3" class="sref">ent_siz3./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=offset" class="sref">offset./a>);"4718./a>                } else"4719./a>                        .spae class="comment">/* Just fetching data normally */./spae="4720./a>                        .a href="+code=call_fetch" class="sref">call_fetch./a>(&.a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=fetch" class="sref">fetch./a>, .a href="+code=regs" class="sref">regs./a>,"4721./a>                                   .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=offset" class="sref">offset./a>);"4722./a>        }"4723./a>}"4724./a>"4725./a>.spae class="comment">/* Kprobe handler */./spae="4726./a>static .a href="+code=__kprobes" class="sref">__kprobes./a> void .a href="+code=kprobe_trace_func" class="sref">kprobe_trace_func./a>(struct4.a href="+code=kprobe" class="sref">kprobe./a> *.a href="+code=kp" class="sref">kp./a>, struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>)"4727./a>{"4728./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a> = .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=kp" class="sref">kp./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>);"4729./a>        struct4.a href="+code=kprobe_trace_entry_head" class="sref">kprobe_trace_entry_head./a> *.a href="+code=entry" class="sref">entry./a>;"4730./a>        struct4.a href="+code=ring_buffer_event" class="sref">ring_buffer_event./a> *.a href="+code=event" class="sref">event./a>;"4731./a>        struct4.a href="+code=ring_buffer" class="sref">ring_buffer./a> *.a href="+code=buffer" class="sref">buffer./a>;"4732./a>        int .a href="+code=siz3" class="sref">siz3./a>, .a href="+code=dsiz3" class="sref">dsiz3./a>, .a href="+code=pc" class="sref">pc./a>;"4733./a>        unsigned long .a href="+code=irq_flags" class="sref">irq_flags./a>;"4734./a>        struct4.a href="+code=ftrace_event_call" class="sref">ftrace_event_call./a> *.a href="+code=call" class="sref">call./a> = &.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>;"4735./a>"4736./a>        .a href="+code=tp" class="sref">tp./a>->.a href="+code=nhit" class="sref">nhit./a>++;"4737./a>"4738./a>        .a href="+code=local_save_flags" class="sref">local_save_flags./a>(.a href="+code=irq_flags" class="sref">irq_flags./a>);"4739./a>        .a href="+code=pc" class="sref">pc./a> = .a href="+code=preempt_count" class="sref">preempt_count./a>();"4740./a>"4741./a>        .a href="+code=dsiz3" class="sref">dsiz3./a> = .a href="+code=__get_data_siz3" class="sref">__get_data_siz3./a>(.a href="+code=tp" class="sref">tp./a>, .a href="+code=regs" class="sref">regs./a>);"4742./a>        .a href="+code=siz3" class="sref">siz3./a> = siz3of(*.a href="+code=entry" class="sref">entry./a>) + .a href="+code=tp" class="sref">tp./a>->.a href="+code=siz3" class="sref">siz3./a> + .a href="+code=dsiz3" class="sref">dsiz3./a>;"4743./a>"4744./a>        .a href="+code=event" class="sref">event./a> = .a href="+code=trace_current_buffer_lock_reserve" class="sref">trace_current_buffer_lock_reserve./a>(&.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=call" class="sref">call./a>->.a href="+code=event" class="sref">event./a>..a href="+code=type" class="sref">type./a>,"4745./a>                                                  .a href="+code=siz3" class="sref">siz3./a>, .a href="+code=irq_flags" class="sref">irq_flags./a>, .a href="+code=pc" class="sref">pc./a>);"4746./a>        if (!.a href="+code=event" class="sref">event./a>)"4747./a>                return;"4748./a>"4749./a>        .a href="+code=entry" class="sref">entry./a> = .a href="+code=ring_buffer_event_data" class="sref">ring_buffer_event_data./a>(.a href="+code=event" class="sref">event./a>);"4750./a>        .a href="+code=entry" class="sref">entry./a>->.a href="+code=ip" class="sref">ip./a> = (unsigned long).a href="+code=kp" class="sref">kp./a>->.a href="+code=addr" class="sref">addr./a>;"4751./a>        .a href="+code=store_trace_args" class="sref">store_trace_args./a>(siz3of(*.a href="+code=entry" class="sref">entry./a>), .a href="+code=tp" class="sref">tp./a>, .a href="+code=regs" class="sref">regs./a>, (.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=entry" class="sref">entry./a>[1], .a href="+code=dsiz3" class="sref">dsiz3./a>);"4752./a>"4753./a>        if (!.a href="+code=filter_current_check_discard" class="sref">filter_current_check_discard./a>(.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=call" class="sref">call./a>, .a href="+code=entry" class="sref">entry./a>, .a href="+code=event" class="sref">event./a>))"4754./a>                .a href="+code=trace_nowake_buffer_unlock_commit_regs" class="sref">trace_nowake_buffer_unlock_commit_regs./a>(.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=event" class="sref">event./a>,"4755./a>                                                       .a href="+code=irq_flags" class="sref">irq_flags./a>, .a href="+code=pc" class="sref">pc./a>, .a href="+code=regs" class="sref">regs./a>);"4756./a>}"4757./a>"4758./a>.spae class="comment">/* Kretprobe handler */./spae="4759./a>static .a href="+code=__kprobes" class="sref">__kprobes./a> void .a href="+code=kretprobe_trace_func" class="sref">kretprobe_trace_func./a>(struct4.a href="+code=kretprobe_instance" class="sref">kretprobe_instance./a> *.a href="+code=ri" class="sref">ri./a>,"4760./a>                                          struct4.a href="+code=pt_regs" class="sref">pt_regs./a> *.a href="+code=regs" class="sref">regs./a>)"4761./a>{"4762./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a> = .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=ri" class="sref">ri./a>->.a href="+code=rp" class="sref">rp./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=rp" class="sref">rp./a>);"4763./a>        struct4.a href="+code=kretprobe_trace_entry_head" class="sref">kretprobe_trace_entry_head./a> *.a href="+code=entry" class="sref">entry./a>;"4764./a>        struct4.a href="+code=ring_buffer_event" class="sref">ring_buffer_event./a> *.a href="+code=event" class="sref">event./a>;"4765./a>        struct4.a href="+code=ring_buffer" class="sref">ring_buffer./a> *.a href="+code=buffer" class="sref">buffer./a>;"4766./a>        int .a href="+code=siz3" class="sref">siz3./a>, .a href="+code=pc" class="sref">pc./a>, .a href="+code=dsiz3" class="sref">dsiz3./a>;"4767./a>        unsigned long .a href="+code=irq_flags" class="sref">irq_flags./a>;"4768./a>        struct4.a href="+code=ftrace_event_call" class="sref">ftrace_event_call./a> *.a href="+code=call" class="sref">call./a> = &.a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>;"4769./a>"4770./a>        .a href="+code=local_save_flags" class="sref">local_save_flags./a>(.a href="+code=irq_flags" class="sref">irq_flags./a>);"4771./a>        .a href="+code=pc" class="sref">pc./a> = .a href="+code=preempt_count" class="sref">preempt_count./a>();"4772./a>"4773./a>        .a href="+code=dsiz3" class="sref">dsiz3./a> = .a href="+code=__get_data_siz3" class="sref">__get_data_siz3./a>(.a href="+code=tp" class="sref">tp./a>, .a href="+code=regs" class="sref">regs./a>);"4774./a>        .a href="+code=siz3" class="sref">siz3./a> = siz3of(*.a href="+code=entry" class="sref">entry./a>) + .a href="+code=tp" class="sref">tp./a>->.a href="+code=siz3" class="sref">siz3./a> + .a href="+code=dsiz3" class="sref">dsiz3./a>;"4775./a>"4776./a>        .a href="+code=event" class="sref">event./a> = .a href="+code=trace_current_buffer_lock_reserve" class="sref">trace_current_buffer_lock_reserve./a>(&.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=call" class="sref">call./a>->.a href="+code=event" class="sref">event./a>..a href="+code=type" class="sref">type./a>,"4777./a>                                                  .a href="+code=siz3" class="sref">siz3./a>, .a href="+code=irq_flags" class="sref">irq_flags./a>, .a href="+code=pc" class="sref">pc./a>);"4778./a>        if (!.a href="+code=event" class="sref">event./a>)"4779./a>                return;"4780./a>"4781./a>        .a href="+code=entry" class="sref">entry./a> = .a href="+code=ring_buffer_event_data" class="sref">ring_buffer_event_data./a>(.a href="+code=event" class="sref">event./a>);"4782./a>        .a href="+code=entry" class="sref">entry./a>->.a href="+code=func" class="sref">func./a> = (unsigned long).a href="+code=tp" class="sref">tp./a>->.a href="+code=rp" class="sref">rp./a>..a href="+code=kp" class="sref">kp./a>..a href="+code=addr" class="sref">addr./a>;"4783./a>        .a href="+code=entry" class="sref">entry./a>->.a href="+code=ret_ip" class="sref">ret_ip./a> = (unsigned long).a href="+code=ri" class="sref">ri./a>->.a href="+code=ret_addr" class="sref">ret_addr./a>;"4784./a>        .a href="+code=store_trace_args" class="sref">store_trace_args./a>(siz3of(*.a href="+code=entry" class="sref">entry./a>), .a href="+code=tp" class="sref">tp./a>, .a href="+code=regs" class="sref">regs./a>, (.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=entry" class="sref">entry./a>[1], .a href="+code=dsiz3" class="sref">dsiz3./a>);"4785./a>"4786./a>        if (!.a href="+code=filter_current_check_discard" class="sref">filter_current_check_discard./a>(.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=call" class="sref">call./a>, .a href="+code=entry" class="sref">entry./a>, .a href="+code=event" class="sref">event./a>))"4787./a>                .a href="+code=trace_nowake_buffer_unlock_commit_regs" class="sref">trace_nowake_buffer_unlock_commit_regs./a>(.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=event" class="sref">event./a>,"4788./a>                                                       .a href="+code=irq_flags" class="sref">irq_flags./a>, .a href="+code=pc" class="sref">pc./a>, .a href="+code=regs" class="sref">regs./a>);"4789./a>}"4790./a>"4791./a>.spae class="comment">/* Event entry printers */./spae="4792./a>enum .a href="+code=print_line_t" class="sref">print_line_t./a>"4793./a>.a href="+code=print_kprobe_event" class="sref">print_kprobe_event./a>(struct4.a href="+code=trace_iterator" class="sref">trace_iterator./a> *.a href="+code=iter" class="sref">iter./a>, int .a href="+code=flags" class="sref">flags./a>,"4794./a>                   struct4.a href="+code=trace_event" class="sref">trace_event./a> *.a href="+code=event" class="sref">event./a>)"4795./a>{"4796./a>        struct4.a href="+code=kprobe_trace_entry_head" class="sref">kprobe_trace_entry_head./a> *.a href="+code=field" class="sref">field./a>;"4797./a>        struct4.a href="+code=trace_seq" class="sref">trace_seq./a> *.a href="+code=s" class="sref">s./a> = &.a href="+code=iter" class="sref">iter./a>->.a href="+code=seq" class="sref">seq./a>;"4798./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="sref">tp./a>;"4799./a>        .a href="+code=u8" class="sref">u8./a> *.a href="+code=data" class="sref">data./a>;"4800./a>        int .a href="+code=i" class="sref">i./a>;"4801./a>"4802./a>        .a href="+code=field" class="sref">field./a> = (struct4.a href="+code=kprobe_trace_entry_head" class="sref">kprobe_trace_entry_head./a> *).a href="+code=iter" class="sref">iter./a>->.a href="+code=ent" class="sref">ent./a>;"4803./a>        .a href="+code=tp" class="sref">tp./a> = .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=call" class="sref">call./a>..a href="+code=event" class="sref">event./a>);"4804./a>"4805./a>        if (!.a href="+code=trace_seq_printf" class="sref">trace_seq_printf./a>(.a href="+code=s" class="sref">s./a>, .spae class="string">"%s: ("./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref">call./a>..a href="+code=nam3" class="sref">nam3./a>))"4806./a>                goto .a href="+code=partial" class="sref">partial./a>;"4807./a>"4808./a>        if (!.a href="+code=seq_print_ip_sym" class="sref">seq_print_ip_sym./a>(.a href="+code=s" class="sref">s./a>, .a href="+code=field" class="sref">field./a>->.a href="+code=ip" class="sref">ip./a>, .a href="+code=flags" class="sref">flags./a> | .a href="+code=TRACE_ITER_SYM_OFFSET" class="sref">TRACE_ITER_SYM_OFFSET./a>))"4809./a>                goto .a href="+code=partial" class="sref">partial./a>;"4810./a>"4811./a>        if (!.a href="+code=trace_seq_puts" class="sref">trace_seq_puts./a>(.a href="+code=s" class="sref">s./a>, .spae class="string">")"./spae=))"4812./a>                goto .a href="+code=partial" class="sref">partial./a>;"4813./a>"4732./a>        int814">481cref">event./ring_a hre+code=regs" class="sref">regs./a>, (.a href="a href="+code=s" class="sref"[1]oto .a href="+code=partial" class="sref">p4">4804./);"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">to .a href="+code=partial" class="sref">p>nam3./a>e="data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hre(!.a am3.1L793">4793./a>.code=seq_print_ip_sym" class="sref">seq_print_ip_sym./a>(.n+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"a>, int .a href="+code=flags" class="sre8ref">dl./8>,"4732./a>        int814">481cref         .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">irint_ip_sym./a>(.a href="+code=s" class="sref"ef">s./a>, .spae class="string">")&quo7">4807./);"4812./a>                goto .a href="+code=partial" class="sref">pFFSET./a>se"4811./a>        if (!.a href="+code=trace_seq_puts" class="sref">trace_seq_puts./a>(.a href="+cod\n=s" class="sref">s./a>, .spae class="string">")&quf">regs./8>,"4812./a>                goto .a href="+code=partial" class="sref">offset./a8);"      8 }"flags./a> | .a hrTYPE_HANDLED   goto .a href="+code=partial" class="sref">o3">4813./>}"4812./a>                g:to .a href="+code=partial" class="sref">o4">4804./a>"flags./a> | .a hrTYPE_PARTIAL_LINE   goto .a href="+code=partial" class="sref">o>nam3./a>e="regs./8>)"4727./8>{"4792./a>enum .a href="+code=print_line_t" class="sref">pri8ef">kp./a8);"4793./a>.a ef="+codene" n=print_kprobe_event" class="sref">print_kprobe_event./a>(struct4.a href="+code=trace_iterator" class="sref">trace_iterator./a> *.a href="+code=iter" class="sref">iter./a>, int .a href="+code=flags" class="sre8">entry./8>;"4794./a>                   struct4.a href="+code=trace_event" class="sref">trace_event./a> *.a href="+code=event" class="sre8">event./8>;"buffer./8>;"4763./a>        struct4.a href="+code=kretprobe_trace_entry_head" class="s="sref">kprobe_trace_entry_head./a> *.a href="+code=field" class="sre8ref">pc./8>;"4797./a>        struct4.a href="+code=trace_seq" class="sref">trace_seq./a> *.a href="+code=s" class="sref">s./a> = &.a href="+code=iter" class="sref">iter./a>->.a href="+code=seq" class="s8q_flags./8>;"4798./a>        struct4.a href="+code=trace_probe" class="sref">trace_probe./a> *.a href="+code=tp" class="8f">call./8>;"4799./a>        .a href="+code=u8" class="sref">u8./a> *.a href="+code=data" class="sre35">4735.8a>"4800./a>        int .a href="+code=i" class=">nhit./a>8+;"4737.8a>"4802./a>        .a href="+code=fiel nam3.1L763">4763./a>        struct4.a href="+code=kretprobe_trace_entrytry_head" class="sref">kprobe_trace_entry_head./a> *).a href="+code=iter" class="sref">iter./a>->.a href="+code=ent" class="sr_flags./a8);"4803./a>        .a href="+code=tp" class="sref">tp./a> = .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_probe" class="sref">trace_probe./a>, .a href="+code=call" class="sref">call./a>..a href="+code=event" class="sref"count./a>8);"4740.8a>"4805./a>        if (!.a href="+code=trace_seq_printf" class="sref">trace_seq_printf./a>(.a href="+code=s" class="sref">s./a>, .spae class="string">"%s: ("./spae=, .a href="+code=tp" class="sref">tp./a>->.a href="+code=call" class="sref"ef">s./a>, .spae class="string">")&qu">regs./a8);"4812./a>                goto .a href="+code=partial" class="sref">">dsiz3./8>;"4743.8a>"4808./a>        if (!.a href="+code=seq_print_ip_sym" class="sref">seq_print_ip_sym./a>(.a href="+code=s" class="sref">s./a>, .a href="+code=entry" class="sref">entry./afield./a>->.a href="+code=ip" class="sref">ip./a>, .a href="+code=flags" class="sref">flags./a> | .a href="+code=TRACE_ITER_SYM_OFFSET" class="sref">TRACE_ITER_SYM_f">type./8>,"4812./a>                goto .a href="+code=partial" class="sref">"5">4735.8);""nhit./a>8>)"4811./a>        if (!.a href="+code=trace_seq_puts" class="sref">trace_seq_puts./a>(.a href="+codref">- =s" class="sref">s./a>, .spae class="string">")&qu     retu8n;"4812./a>                goto .a href="+code=partial" class="sref">"flags./a8a>"event./a8);"4808./a>        if (!.a href="+code=seq_print_ip_sym" class="sref">seq_print_ip_sym./a>(.a href="+code=s" class="sref">s./a>, .a href="+code=entry" class="sref">entrfield./a>->.a href="+code=ip" class="sref">iace_s ~/a>, .a href="+code=flags" class="sref">flags./a> | .a href="+code=TRACE_ITER_SYM_OFFSET" class="sref">TRACE_ITER_SYM_f">addr./8>;"4812./a>                goto .a href="+code=partial" class="sref">>dsiz3./a8);"4752.8a>"4811./a>        if (!.a href="+code=trace_seq_puts" class="sref">trace_seq_puts./a>(.a href="+code=s" class="sref">s./a>, .spae class="string">")&qu>event./a8))"4812./a>                goto .a href="+code=partial" class="sref">>">type./8>,"regs./a8);"        int814">481cref">event./ring_a hre+code=regs" class="sref">regs./a>, (.a href="a href="+code=s" class="sref"[1]oto .a href="+code=partial" class="sref">6">4756./8>}"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref">to .a href="+code=partial" class="sref">6    retu8a>"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hre(!.a am3.1L793">4793./a>.code=seq_print_ip_sym" class="sref">seq_pr        .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"a>, int .a href="+code=flags" class="sre8er */./sp8e="4732./a>        int814">481cref         .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">irint_ip_sym./a>(.a href="+code=s" class="srITER_SYM_OFFSET" class="sref">TRACE_ITER_SYM_ref">ri./8>,"4812./a>                goto .a href="+code=partial" class="sref">f">regs./8>)"4761./8>{"4811./a>        if (!.a href="+code=trace_seq_puts" class="sref">trace_seq_puts./a>(.a href="+cod\n=s" class="sref">s./a>, .spae class="string">")&quef">rp./a8);"4812./a>                goto .a href="+code=partial" class="sref">fevent./a8>;"event./8>;"flags./a> | .a hrTYPE_HANDLED   goto .a href="+code=partial" class="sref">>buffer./8>;"4812./a>                g:to .a href="+code=partial" class="sref">">dsiz3./8>;"flags./a> | .a hrTYPE_PARTIAL_LINE   goto .a href="+code=partial" class="sref">q_flags./8>;"call./8>;"4769.8a>"4768./a>        struct4.a href="+code=ftrace_event_call"1L768">4768./a>        st href="+code=ff">s./a>, .spae class="string">")&qucount./a>8);"4772.8a>"irint_ip_sym./a>(.ine" nam3.1L800">4800./a>        int .a href="+code=i" class="">regs./a8);"field./a> = (struct4.a href="+code=kprobe_trace_e_head" class="s="sref">kprobe_trace_entry_head./a> *.a href="+code=field" class="sre8">dsiz3./8>;"4798./a>        struct4.a href="+code=trace_probe" class="sref">tra        .a href="+code=fie" nam3.1L798">4798./a>        struct4.a hretry_head" class=1L768">4768./a>        st href="+code=ff">data./a> + .a hrehref="+code=u8" class="sref">u8./a> *.a href="+code=data" class="sre75">4775.8a>"f">type./8>," + .a hreDEFINE_FIELDef">flags./a> |DEFINE_FIELD=print;.a href="+crint_ip_sym./a>(.ie=field" class="sref">field./a>->.a FIELD_STRING_IP=field" class="FIELD_STRING_IPef">fi0all./a>..a href="+code=event" class="sref"ef">pc./a8);"/* Event entry print8">event./8>)"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref"> .c#L761" id.1L761" class="line" nam3.1L78     retu8n;"i        .a href="+code=edefum .ss="s8">4798./a>        stdefum .ss="s href="+code=container_of">4768./a>        st href="+code=fr        .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hrefmt"+code=event" classfmt"+coref"a>, int .a href="+code=flags" class="sre880">4780.8a>"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"a>, int .a href="+code=flags" class="sre8>event./a8);"(.a href="+code=s" class="srITERf         .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">ir>, int .a href="+code=flags" class="sre8>2">4772.8>;"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hre                            >, int .a href="+code=flags" class="sre8>>regs./a8>;"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hreis_.a hre="+code=args" cls_.a hre     >, int .a href="+code=flags" class="sre8>>dsiz3./8);"->.a FILf="+OTHER=field" class="FILf="+OTHERrITERll./a>..a href="+code=event" class="sref"85">4785.8a>"if">s./a>, .spae class="string">")&qu>event./a8))"ill./a>..a href="+code=event" class="sref"8f">pc./a8>,"regs./a8);"..a href="+code=event" class="sref"9">4789./8>}"4790.8a>"4768./a>        struct4.a href="+code=ftrace_event_call"1L768">4768./a>        st href="+code=ff">s./a>, .spae class="string">")&qut_line_t.8a>"flags./8>,"irint_ip_sym./a>(.ine" nam3.1L800">4800./a>        int .a href="+code=i" class="">event./8>)"4763./a>        struct4.a href="+code=kretprobe_trace_entr_head" class="s="sref">kprobe_trace_entry_head./a> *.a href="+code=field" class="sre85">4795./8>{"4798./a>        struct4.a href="+code=trace_probe" class="sref">tra        .a href="+code=fie" nam3.1L798">4798./a>        struct4.a hretry_head" class=1L768">4768./a>        st href="+code=ff">data./a> + .a hrehref="+code=u8" class="sref">u8./ *.a href="+code=field" class="sre85event./a8>;"seq./8>;"flags./a> |DEFINE_FIELD=print;.a href="+crint_ip_sym./a>(.de=entry" class="sref">entrfield./a>->.a FIELD_STRING_FUNC=field" class="FIELD_STRING_FUNCef">fi0all./a>..a href="+code=event" class="sref"ref">tp./8>;"flags./a> |DEFINE_FIELD=print;.a href="+crint_ip_sym./a>(.de=entry" class="sref">entry./afield./a>->.a FIELD_STRING_RETIP=field" class="FIELD_STRING_RETIPef">fi0all./a>..a href="+code=event" class="sref9f">data./9>;"/* Event entry print9sref">i./9>;"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref"> .c#L761" id.1L761" class="line" nam3rint9s2ef">i./9>="i        .a href="+code=edefum .ss="s8">4798./a>        stdefum .ss="s href="+code=container_of">4768./a>        st href="+code=fr        .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hrefmt"+code=event" classfmt"+coref"a>, int .a href="+code=flags" class="sre9ef">ent./9>;"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"a>, int .a href="+code=flags" class="sre9>event./a9);"(.a href="+code=s" class="srITERf         .a href="+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.a href="+code=i" class="sref">ir>, int .a href="+code=flags" class="sre9>5vent./a9))"->.a "+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hre                            >, int .a href="+code=flags" class="sre9">nam3./a9))"->.a "+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hreis_.a hre="+code=args" cls_.a hre     >, int .a href="+code=flags" class="sre9partial./9>;"->.a FILf="+OTHER=field" class="FILf="+OTHERrITERll./a>..a href="+code=event" class="sref907">4807.9a>"if">s./a>, .spae class="string">")&q9OFFSET./a9))"ill./a>..a href="+code=event" class="sref9partial./9>;"4810.9a>"..a href="+code=event" class="sref9ot;./spae9))"ent./9>;"4813.9a>"4798./a>        struct4.a href="+code=trace_probe" class="sref">tra, charref="+code=ring_buffobe" class="sreuff>tra,  id.1L766" class="llenobe" class="srelenf">if">s./a>, .spae class="string">")&q9p4">4804.9);"nam3./a9e="4800./a>        int .a href="+code=i" class=9ref">dl./9>,"  /a>        int .a href="+code=i" class=9r7">4807.9);"regs./9>,"4798./a>        struct4els_ id.1L href="+code=containprobe" class="sref">tra)> .c#L761" id.1L761" class="line" nam3rint9offset./a9);"(.a href="+cod(e=s" lxe=s" class="sr./a>        int .a href="+code=i" class=9lf">ent./9 }"da=s" class="srield./a>->.a FIELD_STRING_IP=field" class="FIELD_STRING_IPef">./a>        int .a href="+code=i" class=9l3">4813.9>}"4804.9a>"(.a href="+cod(e=s" lxref">- ==s" lxe=s" class="sr./a>        int .a href="+code=i" class=9l>nam3./a9e="da=s" class="srield./a>->.a FIELD_STRING_FUNC=field" class="FIELD_STRING_FUNCef">  seq_puts./a>(.a href="+cod, RECf">da=s" class="srield./a>->.a FIELD_STRING_RETIP=field" class="FIELD_STRING_RETIPef">./a>        int .a href="+code=i" class=9lef">dl./9>)"4727./9>{"kp./a9);".spae class="comment">/* Event entry print9">entry./9>;"i ?.1L766" class="llenobe" class="srelenf">i -.1L766" class="lpo+code=tp" class=po+702./: 0f">s./a>, .spae class="string">")&q9">event./9>;"buffer./9>;"4805./a>       snL805"> href="+code=containuffobe" class="sreuff>traf         .a href=po+code=tp" class=po+702.r        .a href=LEN_OR_ZERO=field" class="LEN_OR_ZEROrobece_seq_puts./a>(.a href="+cod\="+code=s" cs="sref">s./a>, .spae class="sfmt="+code=i" clasfmt=priRll./a>..a href="+code=event" class="sref9ref">pc./9>;";"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref"> .c#L761" id.1L761" class="line" nam33.1L9q4">4804.9>;"4805./a>       snL805"> href="+code=containuffobe" class="sreuff>traf         .a href=po+code=tp" class=po+702.r        .a href=LEN_OR_ZERO=field" class="LEN_OR_ZEROrobece_seq_puts./a>(.a href="+cod ==s" s=e=s" cs="sref">s./a>c#L761" id.1L761" class="line" nam33.1L9q>nam3./a9a>"->.a "+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"a eld./a>->.a "+code=data" class="sref">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a hrefmt="+code=i" clasfmt=priRll./a>..a href="+code=event" class="sref9ref">dl./9+;"4737.9a>"4805./a>       snL805"> href="+code=containuffobe" class="sreuff>traf         .a href=po+code=tp" class=po+702.r        .a href=LEN_OR_ZERO=field" class="LEN_OR_ZEROrobece_seq_puts./a>(.a href="+cod\="+cod, e=s" cs="sref">s./a>, .spae class="s"srcode=tp" class="sr4800Rll./a>..a href="+code=event" class="sref9count./a>9);"4740.9a>"4702./a>        for (.a href="+code=i" class="sref">i./a> = 0; .a href="+code=i" class="sref">i./a> < .a href="+code=tp" class="sref">tp./a>->.a href="+code=nr_args" class="sref"> .c#L761" id.1L761" classs="line" nam3.1L94buffer./9);"traf">data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[."+code=event" class="sref">f">data./a> + .a href="+code=call" class="sref"a eseq_puts./a>(.a href="+cod(.a hr=s" class="sre == 0f">s./a>, .spae class="string">")&q9">dsiz3./9>;"4805./a>       snL805"> href="+code=containuffobe" class="sreuff>traf         .a href=po+code=tp" class=po+702.r        .a href=LEN_OR_ZERO=field" class="LEN_OR_ZEROrobec">s./a>, .spae class="string">")&q9"_flags./9a>"(.a href="+cod, __get_(.a(e=s" s)s="sref">s./a>c#L761" id.1L761" class="line" nam33.1L9f">type./9>,"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"Rll./a>..a href="+code=event" class="sref9c>nam3./a9);"..a href="+code=event" class="sref9cef">dl./9>)"4805./a>       snL805"> href="+code=containuffobe" class="sreuff>traf         .a href=po+code=tp" class=po+702.r        .a href=LEN_OR_ZERO=field" class="LEN_OR_ZEROrobec  seq_puts./a>(.a href="+cod, RECf">da==s" cs="sref">s./a>c#L761" id.1L761" class="line" nam33.1L9     retu9n;"data./a> + .a href="+code=tp" class="sref">tp./a>->.a href="+code=args" class="sref">args./a>[.f="+code=call" class="sref"Rll./a>..a href="+code=event" class="sref9cflags./a9a>"event./a9);"addr./9>;"4752.9a>".spae class="comment">/* Event entry print9>event./a9))"..a href="+code=event" class="sref9>">type./9>,">nam3./a9);"4756./9>}"4798./a>        struct4.a href="+code=trace_probe" class="sref">traf">s./a>, .spae class="string">")&q96    retu9a>"ill./a>..a href="+code=event" class="sref9ref">ri./9>,"..a href="+code=event" class="sref9r">addr./9>)"4761./9>{".spae class="comment">/* Event entry print9ef">rp./a9);"i        .a href="+__sre (!.a hfmt="+code=i" clas__sre (!.a hfmt=prinf="+code=trace_probe" class="sref">trar        .a href=NULLobe" class="sreNULL>trar 0all./a>..a href="+code=event" class="sref9fevent./a9>;"473(!.a hfmt="+code=i" clas(!.a hfmt=pri        .a href="+kmalloentry" class="srkmalloe=prinf="+code=trace_lenobe" class="srelenf">i + 1r        .a href=GFP_KERNELobe" class="sreGFP_KERNELref"Rll./a>..a href="+code=event" class="sref9">event./9>;"s./a>, .spae class="string">")&q9>buffer./9>;"..a href="+code=event" class="sref9r">4756./9>;";".spae class="comment">/* Event entry print9f">call./9>;"trar        .a href=(!.a hfmt="+code=i" clas(!.a hfmt=prir        .a href=lenobe" class="srelenf">i + 1Rll./a>..a href="+code=event" class="sref969">4769.9a>""%s: ("./spae=, .a href="+code=tp" class="sref">tp./a>->.a hre(!.a hfmt="+code=i" clas(!.a hfmt=pri        .a href="+(!.a hfmt="+code=i" clas(!.a hfmt=prill./a>..a href="+code=event" class="sref9_flags./a9);"9);"..a href="+code=event" class="sref972">4772.9a>"regs./a9);"dsiz3./9>;""type./9>,".spae class="comment">/* Event entry print9ef">pc./a9);"4798./a>    kruct4.a href="+code=trace_kring">"%kprobec">s./a>, .spae class="string">")&q9">event./9>)"s./a>, .spae class="string">")&q9     retu9n;"4780.9a>"4798./a>        struct4.a href="+code=trace_probe" class="sref">tra   ./spae=, .a hrefef="+code=tp" class="sref">tp./a> = .a href="+code=containkring">"%kprobecof./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_rtry" class="sref"pf">tp./a>->.a hrekring">"%kprobeRll./a>..a href="+code=event" class="sref9>event./a9);"4768./a>        struct4.a href="+code=ftrace_event_call"f="+code=tp" class="sref">t>trace_seq./a> *.a hreftring">"%s: ("./spae=, .a href="+code=tp" class="sref">tll./a>..a href="+code=event" class="sref9>2">4772.9>;"field./a> = (struct4.a href="+code=kprobe_trace_erace_event_call"1kpro/a> = (struct4.1kprof">tll./a>..a href="+code=event" class="sref9>>regs./a9>;" = (struct4.hld.ace_ll./a>..a href="+code=event" class="sref9>>dsiz3./9);"..a href="+code=event" class="sref9>buffer./9a>"..a href="+code=event" class="sref9>">type./9))"pc./a9>,"trar        .a href=re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" class="sref9>>event./9);" = (struct4.1kprof">tRf         .a href="+code=data" class="sref">data./a> + .a hres                          f         .a href=ds                  ds       ll./a>..a href="+code=event" class="sref99">4789./9>}"(.u>;"(.u>;"..a href="+code=event" class="sref990">4790.9a>"(.u>;"..a href="+code=event" class="sref99event./a9e="(.WARN_ONCE"da" id.1L739" clasPERF_MAX_ .a hrSIZE"s./a>, .spae class="string">")&q9t_line_t.9a>"(.a href="+cod(!ofile buffer7not large enough=s" class="sref">s./a>, .spae class="string">")&q9">flags./9>,"..a href="+code=event" class="sref99>dsiz3./9>)"4795./9>{" = (struct4.1kprof">t        .a href="+(erf_s="linbuftruepar                (erf_s="linbuftruepar =prinf="+code=trace_s                          r        .a href=f="+code=tp" class="sref">tf">data./a> + .a hre href/a> = (struct4.1hreff">tp./a>->.a hre"+code=event" class="sref">r        .a href=re"+code=tp" class=re"+.a h,race_seq./a> *.a hrefrctxry" class="sref"ctx    )ll./a>..a href="+code=event" class="sref99">type./9>;"tRl./a>..a href="+code=event" class="sref99f">pc./a9>;"..a href="+code=event" class="sref99>event./9>;"data./10f">da href="kernel/trace10f">>10f"robe.c#L776" id.1L776" clas1kpro/a> = (struct4.1kprof">tf">data./a> + .a hreie=field" class="sref">    t;.a href="+ctry_head" class=kring">"%kprobef">data./a> + .a hrefddring">"%fddr    ll./rue>&quodoerneata.35/69/071f018f0fc5ca"li610a95bcb4b1367655a_3/10f">>c#L769" id.1L769" class="line" nam3.1L10f1>data./10f>"10f1robe.c#L739" id.1L739" clasmemref="+code=i" clasmemref=prinace_seq./a> *.a href1kpro/a> = (struct4.1kprof">t[1], 0 " id.1L739" clasds                  ds       )ll./a>..a href="+code=event" class="sref10f2>data./10f="10fprobe.c#L802" id.1L802" classtorf="+codef="+code=tp" class=storf="+codef="+=printtore_trace_event_call"1kpro/a> = (struct4.1kprof">tRa eld./a>->.a "+code=data" class="srer        .a href=re"+code=tp" class=re"+.a h,revent./ring_a hre+code=regs" class="sref">regs./a>, (.a href="1kpro/a> = (struct4.1kprof">t[1],  id.1L739" clasds                  ds       )ll./a>..a href="+code=event" class="sref10f3>data./10f>"10fprobe.c#L813" id.1L813" class="line" nam3.1L10f4>data./10f,"10fprobe.c#L814" id.1L8732">473eld./a> = (struct4.hld.ace_        .a href="+chis_cpu_ptring">"%chis_cpu_ptr=prinf="+code=trace_f="+code=tp" class="sref">tf">data./a> + .a hre(erf_1href+code=tp" class=perf_1href+    )ll./a>..a href="+code=event" class="sref10f5>data./10f)"10f5robe.c#L814" id.1L8732">473(erf_s="linbuftsubmit="+code=i" clas(erf_s="linbuftsubmit=prinf="+code=trace_1kpro/a> = (struct4.1kprof">t,  id.1L739" class                          r        .a href=rctxry" class="sref"ctx    c">s./a>, .spae class="string">")&q10f6>data./10f{"10fprobe.c#L806" id.1L805" class="line" nam3.1L7 id.1L776" clas1kpro/a> = (struct4.1kprof">tf">data./a> + .a hreie=field" class="sref">, 1r        .a href=re"+code=tp" class=re"+.a h,r id.1L8732">473eld./a> = (struct4.hld.ace_r        .a href=NULLobe" class="sreNULL>tra)ll./a>..a href="+code=event" class="sref10f7>data./10f;"10f7robe.c#L756" id.1L756" class="line" nam3.1L710f8>data./10f;"10fprobe/a>        int .a href="+code=i" class=10f9>data./10f;"10f9robe.c#L791" id.1L791" class=Kef="+cod (!ofile handler791./a>.spae class="comment">/* Event entry print101">data./10>;"10>;robe.c#L759 id.1L739" clas__ntry p+code=tp" class=__ntry p+robe.void734" class="linelef="+codeperf_de=entry" class="srlef="+codeperf_de=e=print_kprobe_event" class=kef="+codein.c#nc98">4798./a>    kef="+codein.c#nc9.a href="+code=trace_rf="+code=args" cri    c">s./a>, .spae class="string">")&q1011>data./10a>"10>probe.c#L721" id.1L722222222222222222222222222 00t_kprobe_event" class=pt_re"+code=tp" class=pt_re"+.a href="+code=trace_re"+code=tp" class=re"+.a hf">s./a>, .spae class="string">")&q10>2>data./10))"10>probe.c#L761" id.1L761" class="line" nam3.1L710>3>data./10>;"10>probe.c#L763" id.1L734" class="line" nam3.1L798">4798./a>        struct4.a href="+code=trace_probe" class="sref">tra   ./spae=, .a hrefef="+code=tp" class="sref">tp./a> = .a href="+code=containrf="+code=args" cri    f">data./a> + .a hrertry" class="sref"pf">tcof./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_rtry" class="sref"pf">t)ll./a>..a href="+code=event" class="sref1014>data./10a>"10>probe.c#L754" id.1L734" class="line" nam3.1L768">4768./a>        struct4.a href="+code=ftrace_event_call"f="+code=tp" class="sref">t>trace_seq./a> *.a hreftring">"%s: ("./spae=, .a href="+code=tp" class="sref">tll./a>..a href="+code=event" class="sref10>5>data./10);"10>probe.c#L765" id.1L765" class="linel nam3.1L763">4763./a>        struct4.a href="+code=kretprobe_trace_entrrace_event_call"1kpro/a> = (struct4.1kprof">tll./a>..a href="+code=event" class="sref10>6>data./10e="10>probe.c#L796" id.1L796" class="linehlistield./a> = (struct4.hlistield.ace_erace_event_call"eld./a> = (struct4.hld.ace_ll./a>..a href="+code=event" class="sref10>7>data./10>,"10>probe.c#L717" id.1L766" class="ls                           " id.1L739" clas__s                  __s        " id.1L739" clasds                  ds       ll./a>..a href="+code=event" class="sref10>8>data./10);"10>8robe.c#L717" id.1L766" class="lrctxry" class="sref"ctx    ll./a>..a href="+code=event" class="sref10>9>data./10se"10>probe.c#L769" id.1L769" class="line" nam3.1L102">data./10e="10e=robe.c#L738" id.1L738" clasds                  ds               .a href="+__get_ss="_s                  __get_ss="_s   =prinf="+code=trace_probe" class="sref">trar        .a href=re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" class="sref10e1>data./10>,"10e1robe.c#L739" id.1L739" clas__s                  __s          store_trace_event_call"1kpro/a> = (struct4.1kprof">tRf         .a href="+code=data" class="sref">data./a> + .a hres                          f         .a href=ds                  ds       ll./a>..a href="+code=event" class="sref10e2>data./10);"10eprobe.c#L802" id.1L802" class                          f       .a href="+ALIGN               ALIGN=prinf="+code=trace___s                  __s        +2store_tnt_ip_sym./a>(.u>;"(.u>;"..a href="+code=event" class="sref10e3>data./10 }"10eprobe.c#L763"1L766" class="ls                          f-=2store_tnt_ip_sym./a>(.u>;"..a href="+code=event" class="sref10e4>data./10>}"10eprobe.c#L794" id.nt_ip_sym./a>(.WARN_ONCE"da" id.1L739" clasPERF_MAX_ .a hrSIZE"s./a>, .spae class="string">")&q10e5>data./10a>"10eprobe.c#L745" id.1L74.c#L7 seq_puts./a>(.a href="+cod(!ofile buffer7not large enough=s" class="sref">s./a>, .spae class="string">")&q10e6>data./10e="10eprobe.c#L806" id.1L80 id.1Lll./a>..a href="+code=event" class="sref10e7>data./10>)"10eprobe.c#L737" id.1L737" class="line" nam3.1L10e8>data./10>{"10eprobe.c#L738" id.1L738" clas1kpro/a> = (struct4.1kprof">t        .a href="+(erf_s="linbuftruepar                (erf_s="linbuftruepar =prinf="+code=trace_s                          r        .a href=f="+code=tp" class="sref">tf">data./a> + .a hre href/a> = (struct4.1hreff">tp./a>->.a hre"+code=event" class="sref">r        .a href=re"+code=tp" class=re"+.a h,race_seq./a> *.a hrefrctxry" class="sref"ctx    )ll./a>..a href="+code=event" class="sref10e9>data./10);"10e9robe.c#L794" id.1L811" class="li1kpro/a> = (struct4.1kprof">tRl./a>..a href="+code=event" class="sref103">data./10>;"10>;robe.c#L806" id.1L80 id.1Lll./a>..a href="+code=event" class="sref1031>data./10>;"10>probe.c#L801" id.1L801" class="line" nam3.1L10>2>data./10>;"10>probe.c#L802" id.1L802" clas1kpro/a> = (struct4.1kprof">tf">data./a> + .a hrede=entry" class="sref">entr    t;.a href="+ctry_head" class="+code=data" class="sref">data./a> + .a hrertry" class="sref"pf">tp./a>->.a hrekring">"%kprobep./a>->.a hrefddring">"%fddr    ll.#L801" id.1L801" class="line" nam3.1L10>3>data./10>;"10>probe.c#L763"1L766" class="l1kpro/a> = (struct4.1kprof">tf">data./a> + .a hrede=entry" class="sref">entry./a    t;.a href="+ctry_head" class=rf="+code=args" cri    f">data./a> + .a hrer>enfddring">"%r>enfddr    ll.#L801" id.1L801" class="line" nam3.1L10>4>data./10>;"10>probe.c#L814" id.1L8732">473storf="+codef="+code=tp" class=storf="+codef="+=printtore_trace_event_call"1kpro/a> = (struct4.1kprof">tRa eld./a>->.a "+code=data" class="srer        .a href=re"+code=tp" class=re"+.a h,revent./ring_a hre+code=regs" class="sref">regs./a>, (.a href="1kpro/a> = (struct4.1kprof">t[1],  id.1L739" clasds                  ds       )ll./a>..a href="+code=event" class="sref1035>data./10>;"10>probe.c#L785" id.1L785" class="line" nam3.1L10>6>data./10a>"10>probe.c#L776" id.1L776" claseld./a> = (struct4.hld.ace_        .a href="+chis_cpu_ptring">"%chis_cpu_ptr=prinf="+code=trace_f="+code=tp" class="sref">tf">data./a> + .a hre(erf_1href+code=tp" class=perf_1href+    )ll./a>..a href="+code=event" class="sref1037>data./10+;"10>7robe.c#L776" id.1L776" clas(erf_s="linbuftsubmit="+code=i" clas(erf_s="linbuftsubmit=prinf="+code=trace_1kpro/a> = (struct4.1kprof">t,  id.1L739" class                          r        .a href=rctxry" class="sref"ctx    c">s./a>, .spae class="string">")&q1038>data./10a>"10>probe.c#L718" id.1L71.c#L763"0" class22222222 id.1L739" clas1kpro/a> = (struct4.1kprof">tf">data./a> + .a hrede=entry" class="sref">entry./a, 1r        .a href=re"+code=tp" class=re"+.a h,r id.1L8732">473eld./a> = (struct4.hld.ace_r        .a href=NULLobe" class="sreNULL>tra)ll./a>..a href="+code=event" class="sref1039>data./10);"10>9robe.c#L756" id.1L756" class="line" nam3.1L7104">data./10);"10);robe#end id".c#L791" id.1L791" class=CONFIG_PERF_EVENTS791./a>.spae class="comment">/* Event entry print1041>data./10a>"10)probe.c#L801" id.1L801" class="line" nam3.1L1042>data./10);"10)probe.c#L759 id.1L739" clas__ntry p+code=tp" class=__ntry p+robe.c#L801" id.1L801" class="line" nam3.1L1043>data./10>;"10)probe id.1L766" class="l "+codere"istering">"% "+codere"ister=print_kprobe_event" class=" nam3.1L768">4768./a>        struct4.a href="+code=ftrace_event_call"1L768/a> = (struct4.1hreff">tc">s./a>, .spae class="string">")&q1044>data./10a>"10)probe.c#L754" id.1L752222enum.a href="+code=event" re"="sref">event./a>, stre"robe../a>->.a hre"+code=event" class="sref">r void7race_event_call"href="+code=u8" class="srefRl./a>..a href="+code=event" class="sref1045>data./10>,"10)probe.c#L795" id.1L795" class="line" nam3.1L710)6>data./10);"10)probe.c#L796" id.1L796" class="line" nam3.1L798">4798./a>        struct4.a href="+code=trace_probe" class="sref">tra        .a href="+code=fie" nam3.1L798">4798./a>        struct4.a hretry_head" class=1L768/a> = (struct4.1hreff">tf">data./a> + .a hrehref="+code=u8" class="sref">u8./ *.a href="+code=field" class="sre10)7>data./10>)"10)probe.c#L737" id.1L737" class="line" nam3.1L1048>data./10n;"10)probe.c#L718"switchrevent./ring_a hr"+code=event" class="sref">> .c#L761" id.1L761" classs="line" nam3.1L10)9>data./10a>"10)probe.c#L809"cas ield./a>->.a  .a hrREG_REGISTER=field" class=" .a hrREG_REGISTERrobe:c#L761" id.1L761" classs="line" nam3.1L105">data./10);"10);robe.c#L806" id.1L80 id.1L2 id.1L739" clas1kablf="+code.1L798">4798./a>    1kablf="+code.1L79=prinf="+code=trace_probe" class="sref">trar        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1051>data./10>;"10)1robe.c#L809"cas ield./a>->.a  .a hrREG_UNREGISTER=field" class=" .a hrREG_UNREGISTERrobe:c#L761" id.1L761" classs="line" nam3.1L1052>data./10);"10)probe.c#L812" id.1L811L766" class="ldisablf="+code.1L798">4798./a>    disablf="+code.1L79=prinf="+code=trace_probe" class="sref">trar        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1053>data./10a>"10)probe.c#L763"0" class id.1L60ll./a>..a href="+code=event" class="sref10)4>data./10))"10)probe.c#L804" id.1L804" class="line" nam3.1L10)5>data./10>,"10)probe#ifdef        .a href=CONFIG_PERF_EVENTS="+code=i" clasCONFIG_PERF_EVENTSrobe.c#L804" id.1L804" class="line" nam3.1L10)6>data./10);"10)6robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_REGISTER=field" class=" .a hrREG_PERF_REGISTERrobe:c#L761" id.1L761" classs="line" nam3.1L1057>data./10>}"10)probe.c#L717" id.1L71 id.1L2 id.1L739" clas1kablf="+code.1L798">4798./a>    1kablf="+code.1L79=prinf="+code=trace_probe" class="sref">trar        .a href=TP_FLAG_PROFILh=field" class=" P_FLAG_PROFILh>tra)ll./a>..a href="+code=event" class="sref1058>data./10a>"10)8robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_UNREGISTER=field" class=" .a hrREG_PERF_UNREGISTERrobe:c#L761" id.1L761" classs="line" nam3.1L1059>data./10e="10)probe.c#L809" id.1L801L766" class="ldisablf="+code.1L798">4798./a>    disablf="+code.1L79=prinf="+code=trace_probe" class="sref">trar        .a href=TP_FLAG_PROFILh=field" class=" P_FLAG_PROFILh>tra)ll./a>..a href="+code=event" class="sref106">data./10>,"10>,robe.c#L763"0" class id.1L60ll./a>..a href="+code=event" class="sref1061>data./10>)"10>1robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_OPEN                .a hrREG_PERF_OPENrobe:c#L761" id.1L761" classs="line" nam3.1L1062>data./10>{"10>2robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_CLOSh=field" class=" .a hrREG_PERF_CLOShrobe:c#L761" id.1L761" classs="line" nam3.1L1063>data./10);"10>3robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_ADD=field" class=" .a hrREG_PERF_ADDrobe:c#L761" id.1L761" classs="line" nam3.1L1064>data./10>;"10>4robe.c#L809"cas ield./a>->.a  .a hrREG_PERF_DELobe" class="sre .a hrREG_PERF_DELrobe:c#L761" id.1L761" classs="line" nam3.1L1065>data./10>;"10>probe.c#L745" id.1L74 id.1L60ll./a>..a href="+code=event" class="sref1066>data./10>;"10>6robe#end il./a>..a href="+code=event" class="sref1067>data./10>;"10>probe.c#L717".c#L756" id.1L756" class="line" nam3.1L710>8>data./10>;"10>8robe.c#L809" id.1L60ll./a>..a href="+code=event" class="sref1069>data./10>;"10>9robe.c#L756" id.1L756" class="line" nam3.1L7107">data./10a>"10a>robe.c#L804" id.1L804" class="line" nam3.1L1071>data./10);"10a1robe.c#L759 id.1L739" clas__ntry p+code=tp" class=__ntry p+robe.c#L801" id.1L801" class="line" nam3.1L1072>data./10);"10a2robe id.1L766" class="l "+codedispatchering">"% "+codedispatcher=print_kprobe_event" class=k.1L798">4798./a>    kruct4.a href="+code=trace_kring">"%kprobec0t_kprobe_event" class=pt_re"+code=tp" class=pt_re"+.a href="+code=trace_re"+code=tp" class=re"+.a hf">s./a>, .spae class="string">")&q1073>data./10a>"10a3robe.c#L795" id.1L795" class="line" nam3.1L71074>data./10);"10aprobe.c#L754" id.1L734" class="line" nam3.1L798">4798./a>        struct4.a href="+code=trace_probe" class="sref">tra   f="+code=trace_fef="+code=tp" class="sref">tp./a> = .a href="+code=containkring">"%kprobecof./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_rtry" class="sref"pf">tp./a>->.a hrekring">"%kprobeRll./a>..a href="+code=event" clanam3.1L71075>data./10>;"10aprobe.c#L785" id.1L785" class="line" nam3.1L1076>data./10a>"10aprobe.c#L766" id.nt_ip_sym./a>(."+code=data" class="sref">data./a> + .a hrefla"+code=tp" class=fla"+robe.regs.        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra).c#L785" id.1L785" class="line" nam3.1L1077>data./10>,"10aprobe.c#L717" id.1L711L766" class="l "+codes="linde=entry" class="srld" clas="linde=e href="+code=containkring">"%kprobecof="+code=trace_re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" clanam3.1L71078>data./10);"10a8robe#ifdef        .a href=CONFIG_PERF_EVENTS="+code=i" clasCONFIG_PERF_EVENTSrobe.c#L804" id.1L804" class="line" nam3.1L1079>data./10>)"10a9robe.c#L794" id.nt_ip_sym./a>(."+code=data" class="sref">data./a> + .a hrefla"+code=tp" class=fla"+robe.regs.        .a href=TP_FLAG_PROFILh=field" class=" P_FLAG_PROFILh>tra).c#L804" id.1L804" class="line" nam3.1L108">data./10n;"10n;robe.c#L717" id.1L711L766" class="l "+codeperf_de=entry" class="srld" claperf_de=e=prin="+code=containkring">"%kprobecof="+code=trace_re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" clanam3.1L71081>data./10a>"10n1robe#end il./a>..a href="+code=event" class="sref1082>data./10);"10nprobe.c#L762" id.1L60lid.1L711c#L791" id.1L791" class=We don't tweek ref="+cofo just  id.1L60791./a>.spae class="comment">/* Event entry print1083>data./10>;"10nprobe.c#L756" id.1L756" class="line" nam3.1L710n4>data./10>;"10nprobe.c#L804" id.1L804" class="line" nam3.1L1085>data./10);"10n5robe.c#L759 id.1L739" clas__ntry p+code=tp" class=__ntry p+robe.c#L801" id.1L801" class="line" nam3.1L1086>data./10a>"10n6robe id.1L766" class="l ef="+codedispatchering">"% ef="+codedispatcher=print_kprobe_event" class=kef="+codein.c#nc98">4798./a>    kef="+codein.c#nc9.a href="+code=trace_rf="+code=args" cri    c0t_kprobe_event" class=pt_re"+code=tp" class=pt_re"+.a href="+code=trace_re"+code=tp" class=re"+.a hf">s./a>, .spae class="string">")&q1087>data./10))"10n7robe.c#L795" id.1L795" class="line" nam3.1L71088>data./10>,"10nprobe.c#L718"sid.1L734" class="line" nam3.1L798">4798./a>        struct4.a href="+code=trace_probe" class="sref">tra   f="+code=trace_fef="+code=tp" class="sref">tp./a> = .a href="+code=containrf="+code=args" cri    f">data./a> + .a hrertry" class="sref"pf">tcof./a>(.a href="+code=event" class="sref">event./a>, struct4.a href="+code=trace_rtry" class="sref"pf">t)ll./a>..a href="+code=event" class="sref1089>data./10);"10nprobe.c#L769" id.1L769" class="line" nam3.1L109">data./10>}"10>}robe.c#L794" id.nt_ip_sym./a>(."+code=data" class="sref">data./a> + .a hrefla"+code=tp" class=fla"+robe.regs.        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra).c#L785" id.1L785" class="line" nam3.1L1091>data./10a>"10>probe.c#L721" id.1L72e_event" class=kef="+codes="linde=entry" class="srlef="+codes="linde=e href="+code=containrf="+code=args" cri    cof="+code=trace_re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" clanam3.1L71092>data./10e="10>2robe#ifdef        .a href=CONFIG_PERF_EVENTS="+code=i" clasCONFIG_PERF_EVENTSrobe.c#L804" id.1L804" class="line" nam3.1L1093>data./10a>"10>3robe.c#L794" id.nt_ip_sym./a>(."+code=data" class="sref">data./a> + .a hrefla"+code=tp" class=fla"+robe.regs.        .a href=TP_FLAG_PROFILh=field" class=" P_FLAG_PROFILh>tra).c#L804" id.1L804" class="line" nam3.1L1094>data./10>,"10>probe.c#L754" id.1L75e_event" class=kef="+codeperf_de=entry" class="srlef="+codeperf_de=e=prin="+code=containrf="+code=args" cri    cof="+code=trace_re"+code=tp" class=re"+.a hfll./a>..a href="+code=event" clanam3.1L71095>data./10>)"10>5robe#end il./a>..a href="+code=event" class="sref1096>data./10>{"10>probe.c#L766" id.1L60lid.1L711c#L791" id.1L791" class=We don't tweek ref="+cofo just  id.1L60791./a>.spae class="comment">/* Event entry print1097>data./10>;"10>7robe.c#L756" id.1L756" class="line" nam3.1L71098>data./10>;"10>probe/a>        int .a href="+code=i" class=1099>data./10>;"10>9robe.c#L759f./a>(.a href="+code=event"  href=de=etion+code=tp" class=vent"  href=de=etion+robe.e_event" class=kef="+codede=e+code=tp" class=kef="+codede=e+>tra   .c#L795" id.1L795" class="line" nam3.1L711f">data./11f">da href="kernel/trace11f">>11f"robe.c#L776"p./a>->.a hre""lincode=tp" class=vent"robe.c#L754" i       .a href="+(!.a hkef="+code1L768/a> = (struct4.(!.a hkef="+code1L768robe/a>        int .a href="+code=i" class=11f1>data./11f>"11f1robe}ll./a>..a href="+code=event" clanam3.1L711f2>data./11f="110probe.c#L752" id.1L752" class="line" nam3.1L1103>data./11f>"11fprobe.c#L759f./a>(.a href="+code=event"  href=de=etion+code=tp" class=vent"  href=de=etion+robe.e_event" class=k"+codede=e+code=tp" class=k"+codede=e+>tra   .c#L795" id.1L795" class="line" nam3.1L711f4>data./11f,"11fprobe.c#L814"p./a>->.a hre""lincode=tp" class=vent"robe.c#L754" i       .a href="+(!.a hk"+code1L768/a> = (struct4.(!.a hk"+code1L768robe/a>        int .a href="+code=i" class=11f5>data./11f)"11f5robe}ll./a>..a href="+code=event" clanam3.1L711f6>data./11f{"110probeto .a href="+code=partial" class="sref"1107>data./11f;"110probe.c#L759 id.1L766" class="lre"ister_"+code1L768/a> = (struct4.re"ister_"+code1L768=print_kprobe_event" class=" nam3.1L798">4798./a>        struct4.a href="+code=trace_probe" class="sref">tra).c#L804" id.1L804" class="line" nam3.1L11f8>data./11f;"110probe.c#L761" id.1L761" classs="line" nam3.1L1109>data./11f;"1109robe.c#L794" id.1L734" class="line" nam3.1L768">4768./a>        struct4.a href="+code=ftrace_event_call"f="+code=tp" class="sref">t>trace_seq./a> *.a hreftring">"%s: ("./spae=, .a href="+code=tp" class="sref">tll./a>..a href="+code=event" class="sref111">data./11>;"111}robe.c#L794" id.1L766" class="lre8/a> = (struct4.ret=prill./a>..a href="+code=event" class="sref1111>data./11a>"1./13fI1uot;./spae=, .a href="+code=tp" class="sref">tll./a>..a href="+code=event" class="sref111">data./11>;"10>probe.c#L754" id.1L75e_event" class=kef="+co nitialize hreftring">"ce10>;">10>7robe.c#L756" id.1L756" class="line" na13.1L798">4198./a>        struct4.a h1ef="+1ode=trace_prob>data./11a>";"tll./a>..a href    )ll./a>..a href="+code=event" class="sref10l./a>)ll./a>..a href=./a>ROFILh=field" class=" P_Field_PROFILh>tra).c#Lield_>)">10>5robe#end il./a>..a href="+code=event" 13.1L768">4168./a>        struct4.a h1ef="+11_s                          f">dne" nam3.1L_is_rnel/tL804" class="line" nam3.1L_is_rnel/ta hfll./a>..a href="ef="kernel/trace11f;">11>10)probe.c#L809"cas ield./a>->.a  .a hr13.1L763">4163./a>        struct4.a h1ef="+11"data./11f,"1ref">tll./a>..a hrefnam3.1L711f">data./11f">da href="kernel/trace11f"0>5robe#end il./a>..a href="+code=event" 13ef"1107>da(struct4.hlistield.ace_er1ce_ev11a href="kernel/trace1tll./a>..a href    )ll./a>..a href="+code=event" class="sref10l./a>)ll./a>..a href=./a>ROFILh=field" class=" P_defsti_Field_PROFILh>tra).c#defsti_Field_"+code=args" cri    f"ernel/trace11f>_defsti_Field_PROFILh>tra).c#ernel/trace11f>_defsti_Field_11f"0>5robe#end il./a>..a href="+code=event" 13+code1L768         " id.1L739" clas1_s   1              } else10)probe.c#L809"cas ield./a>->.a  .a hr133.1L1109>d"ctx    ll./a>..a href="+1ode=e11of">tf">data./a> + .atll./a>..a href    )ll./a>..a href="+code=event" class="sref10href=re"+code=tp" class=re"+.a h,race_seq./a>data./11f,"1ref">tll./a>..a hrefn711f4>data./11f,"47ta./10e="..a href="+code=event" class="sref10l./a>)ll./a>..a href=./a>ROFILh=field" class=" P_defsti_Field_PROFILh>tra).c#defsti_Field_"+code=args" cri    f"el/trace11f>_defsti_Field_PROFILh>tra).c#el/trace11f>_defsti_Field_11f"0>5robe#end il./a>..a href="+code=event" 1        ds1              .a href="+_1get_s1="_s          0>probe/a>        int .a href="+code=i" c1         _1s          store_trace_ev1nt_ca1l"1kpro/a> = (               f">drar        .a href=(!.a hfmt+code=i" clas(!.a hfmt=prir        .a href=lenobe" class) < 010probe.c#L761" id.1L761" classs="line" na          1    f       .a href="+ALI1N    12.1L79=prinf="+code=trlass="sref9r">4756./9>;"41    f-=2store_tnt_ip_sym.1a>(.u1;"">1de=args" cri    f".a href="hreftring">&        struct4.a href="hreftring">&_probref">tll./a>..a href    )ll./a>..a href="+code=event" class="sref10href=re"+code=tp" class=re"+.10>5robe#end il./a>..a href="+code=event" 1E"data./10>;href="kernel/trace11a>">1>10)probe.c#L809"cas ield./a>->.a  .a hr1.a href="+1od(!ofile buffer7not larg1 enou1h=s" class="sref">s./aargs" cri    f"efrerobe_event" classfrer(!.a hfmt=prir          )ll./a>..a href="+code=event" class="sref103/a9);"daent" class="sref10e7>data1/10>)11sref9r">4756./9>;"{"10>8robe.c#L809" id.1L60ll./a>..a href="+c1struct4.1k1rof">t        .a href="+(1rf_s=1linbuftruepar                    )ll./a>..a href="+code=event" class="sref10FLAG_PROFILh>tra).c#L804" id.1=>10>9robe.c#L756" id.1L756" class="line" na1> = (struc14.1kprof">tRl./a>..a href1"+cod1=event" class=ace_probe" clas    )ll./a>..a href="+code=event" class="sref10l./a>)ll./a>..a href=./a>ROFILh=field" class=" P_e_event_call"href==u8" clae=args" cri    f"el/trac/a>        struct4.a href="+code=ftrace_ev0>9robe.c#L756" id.1L756" class="line" na1f="+code=e1ent" class="sref1031>data1/10>;1..a href="+code=event" class="sref10a href="kernel/trace10>)">1e=tp" class="sref"> .a href=lenobe" class0>9robe.c#L756" id.1L756" class="line" na1f        _1ta./10>;" = (struct4.1kprof"href="kernel/trace11a>">1de=args" cri    f"" clasaddsref">t>trace_seq./a> *.a " clasaddsref">t>tra(!.a hfmt=prir          )ll./a>..a href="+code=10>5robe#end il./a>..a href="+code=event" 1struct4.1k1rof">tf">data./a> + .a hr1de=en13_s                          f">dhref="kernel/trace11a>">1>10)probe.c#L809"cas ield./a>->.a  .a hr1struct4.1k1rof">tf">data./a> + .a hr1de=en1ry" class="sreo/a> = (struct4.1kprof"pr_info href="kernel/tra_info(!.a hae class="string">")&Failed to de=ftrac t;.a   ref">: %s\nl/trace10e=">1hreff">tp./a>->.a hre"+code=event" class="sref">r        .a  + . hre"+code=even + .ode=10>5robe#end il./a>..a href="+code=event" 1s"..a href="+code=event" class="sref103/a9);"6>d1ta./10a>"s./aargs" cri    f"un.a href="hreftring">&        struct4un.a href="hreftring">&_probref">tll./a>..a href    )ll./a>..a href="+code=event" class="sref10href=re"+code=tp" class=re"+.10>5robe#end il./a>..a href="+code=event" 1truct4.hld1ace_        .a href="+chi1_cpu_1tring">"&0>8robe.c#L809" id.1L60ll./a>..a href="+c1uftsubmit=1+code=i" clas(erf_s="linb1ftsub1it=prinf="+codde=trace_probe" class=href="kernel/trace11a>">1./13fI1uot;./spae=, .a href="+code=tp" cla22222 id.11739" clas1kpro/a> = (stru1t4.1k1rof">t0>8robe.c#L809" id.1L60ll./a>..a href="+c1u = (struc1ata./10);"10>}robe.c#L794" id.nt_ip_sym./a>(."+code=1NFIG_PERF_1VENTS791./a>.spae class="1ommen14elef="+codepbe_event" class=kef=un.a href="8">4798./a>        struct4un.a href="8">4798./a>_probe" class="sref">tra).c#L804" id.1L804" class="line" nam3.1L11f8>data./11f;"110probe.c#L761" id.1L761" classs="line" na3.1L1042>d1ta./10);"100)probe.c#L809"cas ield./a>->.a  .a hr1=tp" class1__ntry p+robe.c#L801" id.1L801"14c#L754" id.1L75e_event" class=kef="+cotpevent8./a> is un.a href=ed in /a>-&gremovring">"()ce10>;">10>7robe.c#L756" id.1L756" class="line" na1ng">"1#37 "+codere"ister=print_1probe14"-&gremovring">"L804" class="line" naremovring">"_probref">tll./a>..a href="+code=event" class="sref111">data./11>;"110>5robe#end il./a>..a href="+code=event" 1ode=event"1re"="sref">event./a>, str1"robe1./a>->.a hrtainrf="+code=arfrerobe_event" classfrer(!.a hfmt=prir      ="+code=event" class="sref111">data./11>;"1a h,race_seq./a>3/a9);"1ata./10);"10>8robe.c#L809" id.1L60ll./a>..a href="+c13.1L798">4198./a>        struct4.a h1ef="+14;">110probe.c#L759 id.1L766" class="lre"ister_3.1L1048>d1ta./10n;"1075e_event" class=kef="+coMake a debugfsf111erflas for ss="rol hrg ;.a   po111sce10>;">10>7robe.c#L756" id.1L756" class="line" na1n2222 id.11lass="sref">> .c#L761" id11L7611 class"line" nam3.1L1086>data.in">t,  id.1L739" ca.in">a>-&g1111>data./11a>"nel/tracuct4.(!.a hk"+code1Lin">nel/tracuct4.(!.a be_e10probe.c#L761" id.1L761" classs="line" na3 = (struc1=field" class=" .a hrREG_1EGIST1Rrobe:0)probe.c#L809"cas ield./a>->.a  .a hr1las1kablf=1+code.1L798">4798./a>    1kablf1"+code.1L79=pre" class="sref">tra).cd        .a href=re"+dr =prinf="045>data./10>,"">1./13fI1uot;./spae=, .a href="+code=tp" claEG_UNREGIS1ER=field" class=" .a hrRE1_UNRE1ISTERrobe:c#L7e" class="sref">tra).cd        .a href=re"+dr =prinf="045>data./10>,"<"10>probe.c#L796" id.1L796" class="linehlis1blf="+code11L798">4798./a>    disabl1="+co15>">11fprobe.c#L759f./a>(.a href="+code=event" ref="+code1event" class="sref10)4>da1a./1015=tp" class=fla"+robe.regs.      .a href="module_notifi.    struct4.a hr.a href="module_notifi. _probref">tll./a>..a href=e" nam3.1L_module_nbL804" class="line" nam3.1L_module_nb;">11>fprobe.c#L759f./a>(.a href="+code=event" rde=event"1ta./10>,"4756./9>;"INVAata./10>;"">10aprobe.c#L766" id.nt_ip_sym./a>(."+code=1EG_PERF_RE1ISTER=field" class=" .a h1REG_P15ring">"%chis_cpu_ptracuct4.    struct4.a hracuct4. >">1de=args" cri    f"" clhrg.in">_d        .a href=re"+" clhrg.in">_d     _prob10>5robe#end il./a>..a href="+code=event" 1las1kablf=1+code.1L798">4798./a>    1kablf15event" class="sref99f">pc./a9>;"">1>fprobe.c#L759f./a>(.a href="+code=event" r2222 id.11EGISTER=field" class=" .a1hrREG15href="kernel/trace9trace99p>10>9robe.c#L756" id.1L756" class="line" na1blf="+code11L798">4798./a>    disabl1="+co15}">10>}robe.c#L794" id.nt_ip_sym./a>(."+code=1ref="+code1event" class="sref1061>da1a./1016a href="kerneace_probe" clas(erf_s="linbuftruepar =prinf="+code=trace_s    debugfs_creati_Fil.(!.a hk"+code1Ldebugfs_creati_Fil.(!.a hae class="string">")&el/trace11f>sl/trace10e=">1h0644ref1035>data./10>;cuct4.    struct4.a hracuct4. >">10)probe.c#L754" id.1L752222enum.a href="+1EG_PERF_OP1N                .a hrREG1PERF_16p" class=pt_re"+.a href="+code=trace_re"+f1035>data./10>="sref10e9>data./10);"el/trace11f>s_op_PROFILh>tra).c#el/trace11f>s_op_e97p10>5robe#end il./a>..a href="+code=event" 1EG_PERF_CL1Sh=field" class=" .a hrRE1_PERF16>">11fprobe.c#L759f./a>(.a href="+code=event" EG_PERF_AD1=field" class=" .a hrREG_1ERF_A1Drobe:c#L761" 75e_event" class=kef="+coE./a> " clf111erflas e10>;">10>7robe.c#L756" id.1L756" class="line" na1EG_PERF_DE1obe" class="sre .a hrREG_1ERF_D16_s               f103">data./10>;"10>;robe.c#L806" id.1L80 id.1Lll./a>..a hr1ref="+code1event" class="sref1066>da1a./101;"&href="kernel/tra_warng">(!.a hae class="string">")&Coulde="..a hr1rG_PERF_RE1067>data./10>;"tf">data./a> + .a hreie=fielhae class="string">")&nt109el/trace11f>slt109 ce10>\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 1Eas1kablf=1L710>8>data./10>;"10)probe.c#L718"switchrevent./ring_a hr"+c1de=event" 1lass="sref1069>data./10>;1da111erflas e10>;">10>7robe.c#L756" id.1L756" class="line" na1Elf="+code1ata./10a>"")&el/tracp10e6>dl/trace10e=">1h0444ref1035>data./10>;cuct4.    struct4.a hracuct4. >">10)probe.c#L754" id.1L752222enum.a href="+13.1L1071>d1ta./10);"data./10>="sref10e9>data./10);"el/tracp10e6>d_op_PROFILh>tra).c#el/tracp10e6>d_op_e97p10>5robe#end il./a>..a href="+code=event" 1=tp" class1__ntry p+robe.c#L801" id.1L801"17s="sref111">data./11>;"&quo1;% "+codedispatcher=pr1nt_kp17_s               f103">data./10>;"10>;robe.c#L806" id.1L80 id.1Lll./a>..a hr13.1L71074>1ata./10);"&href="kernel/tra_warng">(!.a hae class="string">")&Coulde="..a hr13.1L798">4198./a>        struct4.a h1ef="+17href="kernel/trace9tr hreie=fielhae class="string">")&nt109el/tracp10e6>dlt109 ce10>\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 13.1L1076>d1ta./10a>"data./a> + .a href1a"+co1e=tp" 0>8robe.c#L809" id.1L60ll./a>..a href="+c1odes="lind1=entry" class="srld" clas1"lind1=e hre" class="sref10Fs.in">>trace_seq./a> *.a hs.in">>tra(!.a hfmt=prir      in">nel/tracuct4.(!.a hk"+code1Lin">nel/tracuct4.(!.a10>5robe#end il./a>..a href="+code=event" 13e=event" 1e=i" clasCONFIG_PERF_EVEN1Srobe17;">10>9robe.c#L759f./a>(.a href="+code=event"1ata" class1"sref">data./a> + .a href1a"+co17}">10>}robe.c#L794" id.nt_ip_sym./a>(."+code=1odeperf_de1entry" class="srld" clape1f_de=1=prin=" id.1L804" class="line" nam3Fl/traceTARTUP_TEST(!.a hk"+code1Le" nam3Fl/traceTARTUP_TEST">10>}robe.c#L794" id.nt_ip_sym./a>(."+code=1otp" class1082>data./10);"data./11>;">;robe.c#L806" id.1L80 id.1Lll./a>..a hr13.1L710n4>1ata./10>;"175e_event" class=kef=" * Thefl/trac__usedl/trac keeps gcc from removhrg thefid.1L795 symbole10e=">>;robe.c#L806" id.1L80 id.1Lll./a>..a hr13.1L798">41ta./10);"1075e_event" class=kef=" * from thefktrasyms tPROF.e10e=">>;robe.c#L806" id.1L80 id.1Lll./a>..a hr13.1L1076>d1__ntry p+robe.c#L801" id.1L801"1class=75e_event" class=kef=" *10>;">10>7robe.c#L756" id.1L756" class="line" na1chering">&1uot;% ef="+codedispatc1er=pr1nt_kpr"line" nam3.1L1086>data.usedt,  id.1L739" ca.useda>-&g1111>data./11a>"t,  id.1L739" cel/tracuct4._selftest_thref>(!.a 1111>data./11a>"="1111>data./11a>"="1111>data./11a>"10)probe.c#L754" id.1L752222enum.a href="+13.1L71088>1ata./10>,"data./11a>"="1111>data./11a>"="1111>data./11a>"10>;robe.c#L806" id.1L80 id.1Lll./a>..a hr13.1L798">4198./a>        struct4.a h1ef="+18f;">1109robe.c#L794" id.1L734" class="line" nam3.1L109">d1ta./10>}">data./11a>"ref10e2>data./10);aref="kernel/traca2);">ref10e2>data./10);a3ef="kernel/traca3>">1ref10e2>data./10);ahref="kernel/traa4);">ref10e2>data./10);a5ref="kernel/traa5);">ref10e2>data./10);a6ref="kernel/traa6;">10>5robe#end il./a>..a href="+code=event" 1ata" class1"sref">data./a> + .a href1a"+co1e=tp" 0>8robe.c#L809" id.1L60ll./a>..a href="+c1"+codes="l1nde=entry" class="srlef="1codes19s="sref111">data./11>;"data.in">t,  id.1L739" ca.in">a>-&g1111>data./11a>"t,  id.1L739" cel/tracuct4._self_tests.in">(!.a be_e10probe.c#L761" id.1L761" classs="line" naata" class1"sref">data./a> + .a href1a"+co19);">10aprobe.c#L754" id.1L734" class="line" na1"+codeperf1de=entry" class="srlef="+1odepe1f_de=e=prin="+1111>data./11a>"1ref1035>data./10>warnf="kernel/tracewarninf="+c10>9robe.c#L756" id.1L756" class="line" na1lass="sref1096>data./10>{"t,  id.1L739" cthref>(!.a) 111="111="111="111="111="11110>5robe#end il./a>..a href="+code=event" 1.1L791" cl1ss=We don't tweek ref1"+cof19de=trace_probe" class="sref">tra        .a href="+code=fie" nam3.1L798">4798./a>        struct4.a hretry_head" class0>5robe#end il./a>..a href="+code=event" 1..1L71088>1ata./10>;"10)probe.c#L718"switchrevent./ring_a hr"+c1ass=1099>d1ta./10>;"(!.aae=args" cri    f"el/tracuct4._selftest_thref>t,  id.1L739" cel/tracuct4._selftest_thref>(!.a0>5robe#end il./a>..a href="+code=event" 1..1L109">d1ion+code=tp" class=vent" 1href=19}">10>}robe.c#L794" id.nt_ip_sym./a>(."+code=2p" class=v2nt"robe.c#L754" i       .2 href20a href="kerneace_probe" claspr_info href="kernel/tra_info(!.a hae class="string">")&Testhrg t;.a   " clhrg: l/trace10e=">10>5robe#end il./a>..a href="+code=event" 2m3.1L711f22data./11f="data./11>;"d2ta./11f>"entr    t;.ahref="kernel/trace11a>">1de=args" cri    f"" clal/tracass=andt,  id.1L739" c" clal/tracass=and(!.a hae class="string">")&p:test;.a   el/tracuct4._selftest_thref>fl/trace10e=">>;robe.c#L806" id.1L80 id.1Lll./a>..a hr2 href=de=e2ion+code=tp" class=vent" 2href=20y" class="sreo/a> = (race9tr hreie=fielhae class="string">")&$"lick $"lick0 +0($"lick)l/trace10e=">1>;robe.c#L806" id.1L80 id.1Lll./a>..a hr2 4ref=de=e2ie=entry" class="srlef="+2 href20href="kernel/trace9tr hreie=fielss="sref">entr    t;.acreati_     .a href="+code=fie" ncreati_     .a hre(!.a10>5robe#end il./a>..a href="+code=event" 2m3.1L711f62data./11f{""">1>>10)probe.c#L809"cas ield./a>->.a  .a hr2ref"1107>d2ta./11f;"..a hrefpr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on ;.a hrg id.1L795 ce10>.\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2"+code1L762/a> = (struct4.re"ister_"2code120e href="+code=containkring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 2"8code1L762/a./10>;"->.a  .a hr23.1L768">4268./a>        struct4.a h2ef="+20.1L79=prinf="+code=tra5e_event" class=kef="+coE_PROF /a>-& po111 *10>;">10>7robe.c#L756" id.1L756" class="line" na2 (struct4.2et=prill./a>..a href="+co2e=eve21prin="+code=containkring">"%f="+code=containrf="+code=args" cri    f"find_     .a href="+code=fie" nfind_     .a hre(!.a hae class="string">")&test;.a  l/trace10e=">1hreff">tp./a>-&gKPROBEace10a_SYSThref="kernel/tracKPROBEace10a_SYSThr(!.a10>5robe#end il./a>..a href="+code=event" 2ss="sref">2ll./a>..a href="+code=eve2t" cl21p" class=pt_re"+.a hr1"+robe.regs.      WARN_ON_ON/10a>"1>10)probe.c#L809"cas ield./a>->.a  .a hr2class=,",">12>prob21.1L79=prinf="+code=trl/trace1tll./a>..a hrefpr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on ef>thrg new ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 23.1L798">4298./a>        struct4.a h2ef="+21y" class="sreo/a> = (race9tr kring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 23.1L768">4268./a>        struct4.a h2ef="+21href="kernel/trace9tr} else>5robe#end il./a>..a href="+code=event" 233.1L711f6263./a>        struct4.a h2ef="+21""&#"sref">trar        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1051>data./10>;"10)1robe.c#L809"cas ield./a>->.a  .a hr23ef"1107>d2(struct4.hlistield.ace_er2ce_ev21ring">"&0>8robe.c#L809" id.1L60ll./a>..a href="+c23+code1L762         " id.1L739" clas2_s   21;">10)probe.c#L718"switchrevent./ring_a hr"+c233.1L1109>2"ctx    ll./a>..a href="+2ode=e21inbuftruepar                href="kernel/trace11a>">1de=args" cri    f"" clal/tracass=andt,  id.1L739" c" clal/tracass=and(!.a hae class="string">")&r:test;.a  2 el/tracuct4._selftest_thref>fl/trace10e=">>;robe.c#L806" id.1L80 id.1Lll./a>..a hr23.1L768">42ta./10e="")&$11avall/trace10e=">1hreff">tp./a>->reati_     .a href="+code=fie" ncreati_     .a hre(!.a10>5robe#end il./a>..a href="+code=event" 2        ds2              .a href="+_2get_s22=tp" class=fla"+robe.regs.      WARN_ON_ON/10a>"">1>>10)probe.c#L809"cas ield./a>->.a  .a hr2         _2s          store_trace_ev2nt_ca22linde=e href="+code=containrf="+codepr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on ;.a hrg id.1L795 ace99p.\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2          2    f       .a href="+ALI2N    22.1L79=prinf="+code=trkring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 22.1L798">42    f-=2store_tnt_ip_sym.2a>(.u2;"->.a  .a hr2E"-& po111 *10>;">10>7robe.c#L756" id.1L756" class="line" na2.a href="+2od(!ofile buffer7not larg2 enou2h=s" class="sref">s./aargs" cri    f"f="+code=containrf="+code=args" cri    f"find_     .a href="+code=fie" nfind_     .a hre(!.a hae class="string">")&test;.a  2l/trace10e=">1hreff">tp./a>-&gKPROBEace10a_SYSThref="kernel/tracKPROBEace10a_SYSThr(!.a10>5robe#end il./a>..a href="+code=event" 2Eef"1107>d2ent" class="sref10e7>data2/10>)2"1>10)probe.c#L809"cas ield./a>->.a  .a hr22+code1L762ta./10>{"..a hrefpr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on ef>thrg new ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2struct4.1k2rof">t        .a href="+(2rf_s=22href="kernel/trace9tr+code=trkring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 22.1L768">424.1kprof">tRl./a>..a href2"+cod22.1L79=prinf="+code=tr} else>5robe#end il./a>..a href="+code=event" 2f="+code=e2ent" class="sref1031>data2/10>;23prin="+code=containkref="+codkring">"&#"sref">trar        .a href=TP_FLAG_ .a h=field" class=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1051>data./10>;"10)1robe.c#L809"cas ield./a>->.a  .a hr2f        _2ta./10>;" = (0>8robe.c#L809" id.1L60ll./a>..a href="+c2struct4.1k2rof">tf">data./a> + .a hr2de=en23>">11fprobe.c#L759f./a>(.a href="+code=event"2struct4.1k2rof">tf">data./a> + .a hr2de=en23=tp" class=fla"+robe.regs.      warnf="kernel/tracewarninf=10probe.c#L761" id.1L761" classs="line" n2s""&#"sdt,  id.1L739" cend(!.a0)1robe.c#L809"cas ield./a>->.a  .a hr2fa href="+2ta./10a>"10aprobe.c#L766" id.nt_ip_sym./a>(."+code=2truct4.hld2ace_        .a href="+chi2_cpu_23ring">"%chis_cpu_ptrhref="kernel/trace11a>">1de=args" cri    f""href>t,  id.1L739" cthref>(!.a(1, 2, 3, 4, 5, 610)1robe.c#L809"cas ield./a>->.a  .a hr2f+code1L762+code=i" clas(erf_s="linb2ftsub23;">10)probe.c#L718"switchrevent./ring_a hr"+c222222 id.12739" clas1kpro/a> = (stru2t4.1k23="kernel/trac75e_event" class=kef="+coDisPROF /a>-& po111s before removhrg i1 *10>;">10>7robe.c#L756" id.1L756" class="line" na2u = (struc2ata./10);"")&test;.a  l/trace10e=">1hreff">tp./a>-&gKPROBEace10a_SYSThref="kernel/tracKPROBEace10a_SYSThr(!.a10>5robe#end il./a>..a href="+code=event" 2NFIG_PERF_2VENTS791./a>.spae class="2ommen24=tp" class=fla"+robe.regs.      WARN_ON_ON/10a>"1>10)probe.c#L809"cas ield./a>->.a  .a hr23.1L1042>d2ta./10);"&href="kernel/tra_warng">(!.a hae class="string">")&error on ef>thrg test ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2=tp" class2__ntry p+robe.c#L801" id.2L801"24.1L79=prinf="+code=trkring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 2ng">"2#37 "+codere"ister=print_2probe24"5robe#end il./a>..a href="+code=event" 2n"event./a>, str2"robe24href="kernel/trace9traring">"&#disPROF_     .a href="+code=fie" ndisPROF_     .a hress=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1051>data./10>;"10)1robe.c#L809"cas ield./a>->.a  .a hr23.1L710)6>2ata./10);"10aprobe.c#L766" id.nt_ip_sym./a>(."+code=23.1L798">4298./a>        struct4.a h2ef="+24ring">"%chis_cpu_ptrf="+code=containrf="+code=args" cri    f"find_     .a href="+code=fie" nfind_     .a hre(!.a hae class="string">")&test;.a  2l/trace10e=">1hreff">tp./a>-&gKPROBEace10a_SYSThref="kernel/tracKPROBEace10a_SYSThr(!.a10>5robe#end il./a>..a href="+code=event" 23.1L1048>d2ta./10n;"1>10)probe.c#L809"cas ield./a>->.a  .a hr232222 id.12lass="sref">> .c#L761" id21L76124of">tf">data./a> + .atll./a>..a hrefpr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on ef>thrg 2nd test ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2= = (struc2=field" class=" .a hrREG_2EGIST24.1L79=prinf="+code=trace_probe" claswarnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 2las1kablf=2+code.1L798">4798./a>    2kablf2"+code.1L79=pr} else>5robe#end il./a>..a href="+code=event" 2EG_UNREGIS2ER=field" class=" .a hrRE2_UNRE25linde=e href="+code=containrf="+codedisPROF_     .a href="+code=fie" ndisPROF_     .a hress=" P_FLAG_ .a h>tra)ll./a>..a href="+code=event" class="sref1051>data./10>;"10)1robe.c#L809"cas ield./a>->.a  .a hr2blf="+code21L798">4798./a>    disabl2="+co25>">11fprobe.c#L759f./a>(.a href="+code=event"2ref="+code2event" class="sref10)4>da2a./1025"">1de=args" cri    f"" clal/tracass=andt,  id.1L739" c" clal/tracass=and(!.a hae class="string">")&-:test;.a  l/trace10e=">1hreff">tp./a>->reati_     .a href="+code=fie" ncreati_     .a hre(!.a10>5robe#end il./a>..a href="+code=event" 2rde=event"2ta./10>,"">1>>10)probe.c#L809"cas ield./a>->.a  .a hr2b.1L710)6>2e=i" clasCONFIG_PERF_EVEN2Srobe25"&href="kernel/tra_warng">(!.a hae class="string">")&error on delethrg a ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2EG_PERF_RE2ISTER=field" class=" .a h2REG_P25a href="kernel/trace1tll./a>..a hrefwarnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 2l.1L1048>d2+code.1L798">4798./a>    2kablf25/trace10>;">10>8robe.c#L809" id.1L60ll./a>..a href="+c2r2222 id.12EGISTER=field" class=" .a2hrREG25;">10>9robe.c#L759f./a>(.a href="+code=event"2blf="+code21L798">4798./a>    disabl2="+co25event" class=ace_probe" clashref="kernel/trace11a>">1de=args" cri    f"" clal/tracass=andt,  id.1L739" c" clal/tracass=and(!.a hae class="string">")&-:test;.a  2l/trace10e=">1hreff">tp./a>->reati_     .a href="+code=fie" ncreati_     .a hre(!.a10>5robe#end il./a>..a href="+code=event" 2ref="+code2event" class="sref1061>da2a./1026=tp" class=fla"+robe.regs.      WARN_ON_ON/10a>"">1>>10)probe.c#L809"cas ield./a>->.a  .a hr2EG_PERF_OP2N                .a hrREG2PERF_26p" class=pt_re"+.a hrstruct4.1kprof"pr_warng">&href="kernel/tra_warng">(!.a hae class="string">")&error on delethrg a ;.a  .\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2EG_PERF_CL2Sh=field" class=" .a hrRE2_PERF26.1L79=prinf="+code=trkring">"&#warnf="kernel/tracewarninf=++0>5robe#end il./a>..a href="+code=event" 2EG_PERF_AD2=field" class=" .a hrREG_2ERF_A2Drobe:c#L761" 0>8robe.c#L809" id.1L60ll./a>..a href="+c2EG_PERF_DE2obe" class="sre .a hrREG_2ERF_D26_s   >8robe.c#L809" id.1L60ll./a>..a href="+c2E.1L710)6>2event" class="sref1066>da2a./102;""&#"sdt,  id.1L739" cend(!.a:>8robe.c#L809" id.1L60ll./a>..a href="+c2EG_PERF_RE2067>data./10>;""%chis_cpu_ptrhrlease_all_     .a hrehref="kernel/tracelease_all_     .a hreh(!.a 10>5robe#end il./a>..a href="+code=event" 2E.1L1048>d2L710>8>data./10>;"tf">data./a> + .atll./a>..a hrefpr_ss="&href="kernel/tra_ss="(!.a hae class="string">")&NG: Some tests are failed. Please check them.\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2Elf="+code2ata./10a>"5robe#end il./a>..a href="+code=event" 23.1L1071>d2ta./10);"..a hrefpr_ss="&href="kernel/tra_ss="(!.a hae class="string">")&OK\nl/trace10e=">10>5robe#end il./a>..a href="+code=event" 2=tp" class2__ntry p+robe.c#L801" id.2L801"27p" class=pt_race99p>10>9robe.c#L756" id.1L756" class="line" na2ring">&quo2;% "+codedispatcher=pr2nt_kp27_s   0>8robe.c#L809" id.1L60ll./a>..a href="+c23.1L71074>2ata./10);"8robe.c#L809" id.1L60ll./a>..a href="+c23G_PERF_DE298./a>        struct4.a h2ef="+27href=tll./a>..a hreflati_in">>trace_seq./a> *.a lati_in">>tra(!.a hfmt=prir      el/tracuct4._self_tests.in">t,  id.1L739" cel/tracuct4._self_tests.in">(!.a10>5robe#end il./a>..a href="+code=event" 2=.1L710)6>2ta./10a>"10aprobe.c#L766" id.nt_ip_sym./a>(."+code=2ata" class2"sref">data./a> + .a href2a"+co2e=tp" #endifaprobe.c#L766" id.nt_ip_sym./a>(."+code=2a.1L1048>d2=entry" class="srld" clas2"lind2=e hre"/pree"/div>


"/div>


Theforiginal LXR software by thefprobe.c#Lhttp://sourceforge.net/projects/lx  >LXR ass=un">ycode=ethis experi=kefal vers795 by probe.c#Lmailto:lx @ss=ux.noa lx @ss=ux.nocode.
"/div>

lx .ss=ux.no kindly hosted by probe.c#Lhttp://www.redpill-ss=pro.noa Redpill Ls=pro AScode=eprovider of Ls=ux ss=sulthrg and operaL795" service" since 1995.
"/div>