Skip to content
  1. Aug 21, 2021
    • Tzvetomir Stoyanov (VMware)'s avatar
      tracing: Add a probe that attaches to trace events · 7491e2c4
      Tzvetomir Stoyanov (VMware) authored
      A new dynamic event is introduced: event probe. The event is attached
      to an existing tracepoint and uses its fields as arguments. The user
      can specify custom format string of the new event, select what tracepoint
      arguments will be printed and how to print them.
      An event probe is created by writing configuration string in
      'dynamic_events' ftrace file:
       e[:[SNAME/]ENAME] SYSTEM/EVENT [FETCHARGS]	- Set an event probe
       -:SNAME/ENAME					- Delete an event probe
      
      Where:
       SNAME	- System name, if omitted 'eprobes' is used.
       ENAME	- Name of the new event in SNAME, if omitted the SYSTEM_EVENT is used.
       SYSTEM	- Name of the system, where the tracepoint is defined, mandatory.
       EVENT	- Name of the tracepoint event in SYSTEM, mandatory.
       FETCHARGS - Arguments:
        <name>=$<field>[:TYPE] - Fetch given filed of the tracepoint and print
      			   it as given TYPE with given name. Supported
      			   types are:
      	                    (u8/u16/u32/u64/s8/s16/s32/s64), basic type
              	            (x8/x16/x32/x64), hexadecimal types
      			    "string", "ustring" and bitfield.
      
      Example, attach an event probe on openat system call and print name of the
      file that will be opened:
       echo "e:esys/eopen syscalls/sys_enter_openat file=\$filename:string" >> dynamic_events
      A new dynamic event is created in events/esys/eopen/ directory. It
      can be deleted with:
       echo "-:esys/eopen" >> dynamic_events
      
      Filters, triggers and histograms can be attached to the new event, it can
      be matched in synthetic events. There is one limitation - an event probe
      can not be attached to kprobe, uprobe or another event probe.
      
      Link: https://lkml.kernel.org/r/20210812145805.2292326-1-tz.stoyanov@gmail.com
      Link: https://lkml.kernel.org/r/20210819152825.142428383@goodmis.org
      
      
      
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Co-developed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarTzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      7491e2c4
  2. Aug 19, 2021
  3. Aug 18, 2021
  4. Aug 17, 2021
  5. Aug 16, 2021
  6. Aug 13, 2021
    • Steven Rostedt (VMware)'s avatar
      tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name · 5acce0bf
      Steven Rostedt (VMware) authored
      The following commands:
      
       # echo 'read_max u64 size;' > synthetic_events
       # echo 'hist:keys=common_pid:count=count:onmax($count).trace(read_max,count)' > events/syscalls/sys_enter_read/trigger
      
      Causes:
      
       BUG: kernel NULL pointer dereference, address: 0000000000000000
       #PF: supervisor read access in kernel mode
       #PF: error_code(0x0000) - not-present page
       PGD 0 P4D 0
       Oops: 0000 [#1] PREEMPT SMP
       CPU: 4 PID: 1763 Comm: bash Not tainted 5.14.0-rc2-test+ #155
       Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01
      v03.03 07/14/2016
       RIP: 0010:strcmp+0xc/0x20
       Code: 75 f7 31 c0 0f b6 0c 06 88 0c 02 48 83 c0 01 84 c9 75 f1 4c 89 c0
      c3 0f 1f 80 00 00 00 00 31 c0 eb 08 48 83 c0 01 84 d2 74 0f <0f> b6 14 07
      3a 14 06 74 ef 19 c0 83 c8 01 c3 31 c0 c3 66 90 48 89
       RSP: 0018:ffffb5fdc0963ca8 EFLAGS: 00010246
       RAX: 0000000000000000 RBX: ffffffffb3a4e040 RCX: 0000000000000000
       RDX: 0000000000000000 RSI: ffff9714c0d0b640 RDI: 0000000000000000
       RBP: 0000000000000000 R08: 00000022986b7cde R09: ffffffffb3a4dff8
       R10: 0000000000000000 R11: 0000000000000000 R12: ffff9714c50603c8
       R13: 0000000000000000 R14: ffff97143fdf9e48 R15: ffff9714c01a2210
       FS:  00007f1fa6785740(0000) GS:ffff9714da400000(0000)
      knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 0000000000000000 CR3: 000000002d863004 CR4: 00000000001706e0
       Call Trace:
        __find_event_file+0x4e/0x80
        action_create+0x6b7/0xeb0
        ? kstrdup+0x44/0x60
        event_hist_trigger_func+0x1a07/0x2130
        trigger_process_regex+0xbd/0x110
        event_trigger_write+0x71/0xd0
        vfs_write+0xe9/0x310
        ksys_write+0x68/0xe0
        do_syscall_64+0x3b/0x90
        entry_SYSCALL_64_after_hwframe+0x44/0xae
       RIP: 0033:0x7f1fa6879e87
      
      The problem was the "trace(read_max,count)" where the "count" should be
      "$count" as "onmax()" only handles variables (although it really should be
      able to figure out that "count" is a field of sys_enter_read). But there's
      a path that does not find the variable and ends up passing a NULL for the
      event, which ends up getting passed to "strcmp()".
      
      Add a check for NULL to return and error on the command with:
      
       # cat error_log
        hist:syscalls:sys_enter_read: error: Couldn't create or find variable
        Command: hist:keys=common_pid:count=count:onmax($count).trace(read_max,count)
                                      ^
      Link: https://lkml.kernel.org/r/20210808003011.4037f8d0@oasis.local.home
      
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: stable@vger.kernel.org
      Fixes: 50450603
      
       tracing: Add 'onmax' hist trigger action support
      Reviewed-by: default avatarTom Zanussi <zanussi@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      5acce0bf
    • Masami Hiramatsu's avatar
      init: Suppress wrong warning for bootconfig cmdline parameter · d0ac5fba
      Masami Hiramatsu authored
      Since the 'bootconfig' command line parameter is handled before
      parsing the command line, it doesn't use early_param(). But in
      this case, kernel shows a wrong warning message about it.
      
      [    0.013714] Kernel command line: ro console=ttyS0  bootconfig console=tty0
      [    0.013741] Unknown command line parameters: bootconfig
      
      To suppress this message, add a dummy handler for 'bootconfig'.
      
      Link: https://lkml.kernel.org/r/162812945097.77369.1849780946468010448.stgit@devnote2
      
      Fixes: 86d1919a
      
       ("init: print out unknown kernel parameters")
      Reviewed-by: default avatarAndrew Halaney <ahalaney@redhat.com>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      d0ac5fba
    • Lukas Bulwahn's avatar
      tracing: define needed config DYNAMIC_FTRACE_WITH_ARGS · 12f9951d
      Lukas Bulwahn authored
      Commit 2860cd8a ("livepatch: Use the default ftrace_ops instead of
      REGS when ARGS is available") intends to enable config LIVEPATCH when
      ftrace with ARGS is available. However, the chain of configs to enable
      LIVEPATCH is incomplete, as HAVE_DYNAMIC_FTRACE_WITH_ARGS is available,
      but the definition of DYNAMIC_FTRACE_WITH_ARGS, combining DYNAMIC_FTRACE
      and HAVE_DYNAMIC_FTRACE_WITH_ARGS, needed to enable LIVEPATCH, is missing
      in the commit.
      
      Fortunately, ./scripts/checkkconfigsymbols.py detects this and warns:
      
      DYNAMIC_FTRACE_WITH_ARGS
      Referencing files: kernel/livepatch/Kconfig
      
      So, define the config DYNAMIC_FTRACE_WITH_ARGS analogously to the already
      existing similar configs, DYNAMIC_FTRACE_WITH_REGS and
      DYNAMIC_FTRACE_WITH_DIRECT_CALLS, in ./kernel/trace/Kconfig to connect the
      chain of configs.
      
      Link: https://lore.kernel.org/kernel-janitors/CAKXUXMwT2zS9fgyQHKUUiqo8ynZBdx2UEUu1WnV_q0OCmknqhw@mail.gmail.com/
      Link: https://lkml.kernel.org/r/20210806195027.16808-1-lukas.bulwahn@gmail.com
      
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Jiri Kosina <jikos@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Miroslav Benes <mbenes@suse.cz>
      Cc: stable@vger.kernel.org
      Fixes: 2860cd8a
      
       ("livepatch: Use the default ftrace_ops instead of REGS when ARGS is available")
      Signed-off-by: default avatarLukas Bulwahn <lukas.bulwahn@gmail.com>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      12f9951d
    • Daniel Bristot de Oliveira's avatar
      trace/osnoise: Print a stop tracing message · 0e05ba49
      Daniel Bristot de Oliveira authored
      When using osnoise/timerlat with stop tracing, sometimes it is
      not clear in which CPU the stop condition was hit, mainly
      when using some extra events.
      
      Print a message informing in which CPU the trace stopped, like
      in the example below:
      
                <idle>-0       [006] d.h.  2932.676616: #1672599 context    irq timer_latency     34689 ns
                <idle>-0       [006] dNh.  2932.676618: irq_noise: local_timer:236 start 2932.676615639 duration 2391 ns
                <idle>-0       [006] dNh.  2932.676620: irq_noise: virtio0-output.0:47 start 2932.676620180 duration 86 ns
                <idle>-0       [003] d.h.  2932.676621: #1673374 context    irq timer_latency      1200 ns
                <idle>-0       [006] d...  2932.676623: thread_noise: swapper/6:0 start 2932.676615964 duration 4339 ns
                <idle>-0       [003] dNh.  2932.676623: irq_noise: local_timer:236 start 2932.676620597 duration 1881 ns
                <idle>-0       [006] d...  2932.676623: sched_switch: prev_comm=swapper/6 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=timerlat/6 next_pid=852 next_prio=4
            timerlat/6-852     [006] ....  2932.676623: #1672599 context thread timer_latency     41931 ns
                <idle>-0       [003] d...  2932.676623: thread_noise: swapper/3:0 start 2932.676620854 duration 880 ns
                <idle>-0       [003] d...  2932.676624: sched_switch: prev_comm=swapper/3 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=timerlat/3 next_pid=849 next_prio=4
            timerlat/6-852     [006] ....  2932.676624: timerlat_main: stop tracing hit on cpu 6
            timerlat/3-849     [003] ....  2932.676624: #1673374 context thread timer_latency      4310 ns
      
      Link: https://lkml.kernel.org/r/b30a0d7542adba019185f44ee648e60e14923b11.1626598844.git.bristot@kernel.org
      
      
      
      Cc: Tom Zanussi <zanussi@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      0e05ba49
    • Daniel Bristot de Oliveira's avatar
      trace/timerlat: Add a header with PREEMPT_RT additional fields · e1c4ad4a
      Daniel Bristot de Oliveira authored
      Some extra flags are printed to the trace header when using the
      PREEMPT_RT config. The extra flags are: need-resched-lazy,
      preempt-lazy-depth, and migrate-disable.
      
      Without printing these fields, the timerlat specific fields are
      shifted by three positions, for example:
      
       # tracer: timerlat
       #
       #                                _-----=> irqs-off
       #                               / _----=> need-resched
       #                              | / _---=> hardirq/softirq
       #                              || / _--=> preempt-depth
       #                              || /
       #                              ||||             ACTIVATION
       #           TASK-PID      CPU# ||||   TIMESTAMP    ID            CONTEXT                LATENCY
       #              | |         |   ||||      |         |                  |                       |
                 <idle>-0       [000] d..h...  3279.798871: #1     context    irq timer_latency       830 ns
                  <...>-807     [000] .......  3279.798881: #1     context thread timer_latency     11301 ns
      
      Add a new header for timerlat with the missing fields, to be used
      when the PREEMPT_RT is enabled.
      
      Link: https://lkml.kernel.org/r/babb83529a3211bd0805be0b8c21608230202c55.1626598844.git.bristot@kernel.org
      
      
      
      Cc: Tom Zanussi <zanussi@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      e1c4ad4a
    • Daniel Bristot de Oliveira's avatar
      trace/osnoise: Add a header with PREEMPT_RT additional fields · d03721a6
      Daniel Bristot de Oliveira authored
      Some extra flags are printed to the trace header when using the
      PREEMPT_RT config. The extra flags are: need-resched-lazy,
      preempt-lazy-depth, and migrate-disable.
      
      Without printing these fields, the osnoise specific fields are
      shifted by three positions, for example:
      
       # tracer: osnoise
       #
       #                                _-----=> irqs-off
       #                               / _----=> need-resched
       #                              | / _---=> hardirq/softirq
       #                              || / _--=> preempt-depth                            MAX
       #                              || /                                             SINGLE      Interference counters:
       #                              ||||               RUNTIME      NOISE  %% OF CPU  NOISE    +-----------------------------+
       #           TASK-PID      CPU# ||||   TIMESTAMP    IN US       IN US  AVAILABLE  IN US     HW    NMI    IRQ   SIRQ THREAD
       #              | |         |   ||||      |           |             |    |            |      |      |      |      |      |
                  <...>-741     [000] .......  1105.690909: 1000000        234  99.97660      36     21      0   1001     22      3
                  <...>-742     [001] .......  1105.691923: 1000000        281  99.97190     197      7      0   1012     35     14
                  <...>-743     [002] .......  1105.691958: 1000000       1324  99.86760     118     11      0   1016    155    143
                  <...>-744     [003] .......  1105.691998: 1000000        109  99.98910      21      4      0   1004     33      7
                  <...>-745     [004] .......  1105.692015: 1000000       2023  99.79770      97     37      0   1023     52     18
      
      Add a new header for osnoise with the missing fields, to be used
      when the PREEMPT_RT is enabled.
      
      Link: https://lkml.kernel.org/r/1f03289d2a51fde5a58c2e7def063dc630820ad1.1626598844.git.bristot@kernel.org
      
      
      
      Cc: Tom Zanussi <zanussi@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      d03721a6
  7. Aug 06, 2021
  8. Aug 05, 2021