Commit Graph

66 Commits

Author SHA1 Message Date
Tomas Glozar 331cb7536e trace/osnoise: Add trace events for samples
JIRA: https://issues.redhat.com/browse/RHEL-77358

commit a065bbf776d32a71e748bd948861e6deca803d78
Author: Tomas Glozar <tglozar@redhat.com>
Date:   Mon Feb 3 10:04:18 2025 +0100

    trace/osnoise: Add trace events for samples

    Add trace events that fire at osnoise and timerlat sample generation, in
    addition to the already existing noise and threshold events.

    This allows processing the samples directly in the kernel, either with
    ftrace triggers or with BPF.

    Cc: John Kacur <jkacur@redhat.com>
    Cc: Luis Goncalves <lgoncalv@redhat.com>
    Link: https://lore.kernel.org/20250203090418.1458923-1-tglozar@redhat.com
    Signed-off-by: Tomas Glozar <tglozar@redhat.com>
    Tested-by: Gabriele Monaco <gmonaco@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2025-04-04 11:14:44 +02:00
Tomas Glozar c976080b1c tracing/timerlat: Fix a race during cpuhp processing
JIRA: https://issues.redhat.com/browse/RHEL-65271
CVE: CVE-2024-49866

commit 829e0c9f0855f26b3ae830d17b24aec103f7e915
Author: Wei Li <liwei391@huawei.com>
Date:   Tue Sep 24 17:45:13 2024 +0800

    tracing/timerlat: Fix a race during cpuhp processing

    There is another found exception that the "timerlat/1" thread was
    scheduled on CPU0, and lead to timer corruption finally:

    ```
    ODEBUG: init active (active state 0) object: ffff888237c2e108 object type: hrtimer hint: timerlat_irq+0x0/0x220
    WARNING: CPU: 0 PID: 426 at lib/debugobjects.c:518 debug_print_object+0x7d/0xb0
    Modules linked in:
    CPU: 0 UID: 0 PID: 426 Comm: timerlat/1 Not tainted 6.11.0-rc7+ #45
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    RIP: 0010:debug_print_object+0x7d/0xb0
    ...
    Call Trace:
     <TASK>
     ? __warn+0x7c/0x110
     ? debug_print_object+0x7d/0xb0
     ? report_bug+0xf1/0x1d0
     ? prb_read_valid+0x17/0x20
     ? handle_bug+0x3f/0x70
     ? exc_invalid_op+0x13/0x60
     ? asm_exc_invalid_op+0x16/0x20
     ? debug_print_object+0x7d/0xb0
     ? debug_print_object+0x7d/0xb0
     ? __pfx_timerlat_irq+0x10/0x10
     __debug_object_init+0x110/0x150
     hrtimer_init+0x1d/0x60
     timerlat_main+0xab/0x2d0
     ? __pfx_timerlat_main+0x10/0x10
     kthread+0xb7/0xe0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x2d/0x40
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    ```

    After tracing the scheduling event, it was discovered that the migration
    of the "timerlat/1" thread was performed during thread creation. Further
    analysis confirmed that it is because the CPU online processing for
    osnoise is implemented through workers, which is asynchronous with the
    offline processing. When the worker was scheduled to create a thread, the
    CPU may has already been removed from the cpu_online_mask during the offline
    process, resulting in the inability to select the right CPU:

    T1                       | T2
    [CPUHP_ONLINE]           | cpu_device_down()
    osnoise_hotplug_workfn() |
                             |     cpus_write_lock()
                             |     takedown_cpu(1)
                             |     cpus_write_unlock()
    [CPUHP_OFFLINE]          |
        cpus_read_lock()     |
        start_kthread(1)     |
        cpus_read_unlock()   |

    To fix this, skip online processing if the CPU is already offline.

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20240924094515.3561410-4-liwei391@huawei.com
    Fixes: c8895e271f ("trace/osnoise: Support hotplug operations")
    Signed-off-by: Wei Li <liwei391@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-11-08 08:21:39 +01:00
Tomas Glozar 11169ce566 tracing/timerlat: Drop interface_lock in stop_kthread()
JIRA: https://issues.redhat.com/browse/RHEL-65271

commit b484a02c9cedf8703eff8f0756f94618004bd165
Author: Wei Li <liwei391@huawei.com>
Date:   Tue Sep 24 17:45:12 2024 +0800

    tracing/timerlat: Drop interface_lock in stop_kthread()

    stop_kthread() is the offline callback for "trace/osnoise:online", since
    commit 5bfbcd1ee57b ("tracing/timerlat: Add interface_lock around clearing
    of kthread in stop_kthread()"), the following ABBA deadlock scenario is
    introduced:

    T1                            | T2 [BP]               | T3 [AP]
    osnoise_hotplug_workfn()      | work_for_cpu_fn()     | cpuhp_thread_fun()
                                  |   _cpu_down()         |   osnoise_cpu_die()
      mutex_lock(&interface_lock) |                       |     stop_kthread()
                                  |     cpus_write_lock() |       mutex_lock(&interface_lock)
      cpus_read_lock()            |     cpuhp_kick_ap()   |

    As the interface_lock here in just for protecting the "kthread" field of
    the osn_var, use xchg() instead to fix this issue. Also use
    for_each_online_cpu() back in stop_per_cpu_kthreads() as it can take
    cpu_read_lock() again.

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20240924094515.3561410-3-liwei391@huawei.com
    Fixes: 5bfbcd1ee57b ("tracing/timerlat: Add interface_lock around clearing of kthread in stop_kthread()")
    Signed-off-by: Wei Li <liwei391@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-11-08 08:21:39 +01:00
Tomas Glozar d0b32ebdfa tracing/timerlat: Fix duplicated kthread creation due to CPU online/offline
JIRA: https://issues.redhat.com/browse/RHEL-65271

commit 0bb0a5c12ecf36ad561542bbb95f96355e036a02
Author: Wei Li <liwei391@huawei.com>
Date:   Tue Sep 24 17:45:11 2024 +0800

    tracing/timerlat: Fix duplicated kthread creation due to CPU online/offline

    osnoise_hotplug_workfn() is the asynchronous online callback for
    "trace/osnoise:online". It may be congested when a CPU goes online and
    offline repeatedly and is invoked for multiple times after a certain
    online.

    This will lead to kthread leak and timer corruption. Add a check
    in start_kthread() to prevent this situation.

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20240924094515.3561410-2-liwei391@huawei.com
    Fixes: c8895e271f ("trace/osnoise: Support hotplug operations")
    Signed-off-by: Wei Li <liwei391@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-11-08 08:21:39 +01:00
Tomas Glozar 2c246e85e2 tracing/osnoise: Fix build when timerlat is not enabled
JIRA: https://issues.redhat.com/browse/RHEL-39968

commit af178143343028fdec9d5960a22d17f5587fd3f5
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Sep 9 10:32:31 2024 -0400

    tracing/osnoise: Fix build when timerlat is not enabled

    To fix some critical section races, the interface_lock was added to a few
    locations. One of those locations was above where the interface_lock was
    declared, so the declaration was moved up before that usage.
    Unfortunately, where it was placed was inside a CONFIG_TIMERLAT_TRACER
    ifdef block. As the interface_lock is used outside that config, this broke
    the build when CONFIG_OSNOISE_TRACER was enabled but
    CONFIG_TIMERLAT_TRACER was not.

    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: "Helena Anna" <helena.anna.dubel@intel.com>
    Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
    Cc: Tomas Glozar <tglozar@redhat.com>
    Link: https://lore.kernel.org/20240909103231.23a289e2@gandalf.local.home
    Fixes: e6a53481da29 ("tracing/timerlat: Only clear timer if a kthread exists")
    Reported-by: "Bityutskiy, Artem" <artem.bityutskiy@intel.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-09-16 13:28:09 +02:00
Tomas Glozar 9ca7acff92 tracing/timerlat: Add interface_lock around clearing of kthread in stop_kthread()
JIRA: https://issues.redhat.com/browse/RHEL-39968

commit 5bfbcd1ee57b607fd29e4645c7f350dd385dd9ad
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Sep 5 11:33:59 2024 -0400

    tracing/timerlat: Add interface_lock around clearing of kthread in stop_kthread()

    The timerlat interface will get and put the task that is part of the
    "kthread" field of the osn_var to keep it around until all references are
    released. But here's a race in the "stop_kthread()" code that will call
    put_task_struct() on the kthread if it is not a kernel thread. This can
    race with the releasing of the references to that task struct and the
    put_task_struct() can be called twice when it should have been called just
    once.

    Take the interface_lock() in stop_kthread() to synchronize this change.
    But to do so, the function stop_per_cpu_kthreads() needs to change the
    loop from for_each_online_cpu() to for_each_possible_cpu() and remove the
    cpu_read_lock(), as the interface_lock can not be taken while the cpu
    locks are held. The only side effect of this change is that it may do some
    extra work, as the per_cpu variables of the offline CPUs would not be set
    anyway, and would simply be skipped in the loop.

    Remove unneeded "return;" in stop_kthread().

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Tomas Glozar <tglozar@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
    Link: https://lore.kernel.org/20240905113359.2b934242@gandalf.local.home
    Fixes: e88ed227f639e ("tracing/timerlat: Add user-space interface")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-09-10 14:07:11 +02:00
Tomas Glozar ac776f95ed tracing/timerlat: Only clear timer if a kthread exists
JIRA: https://issues.redhat.com/browse/RHEL-39968

commit e6a53481da292d970d1edf0d8831121d1c5e2f0d
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Sep 5 08:53:30 2024 -0400

    tracing/timerlat: Only clear timer if a kthread exists

    The timerlat tracer can use user space threads to check for osnoise and
    timer latency. If the program using this is killed via a SIGTERM, the
    threads are shutdown one at a time and another tracing instance can start
    up resetting the threads before they are fully closed. That causes the
    hrtimer assigned to the kthread to be shutdown and freed twice when the
    dying thread finally closes the file descriptors, causing a use-after-free
    bug.

    Only cancel the hrtimer if the associated thread is still around. Also add
    the interface_lock around the resetting of the tlat_var->kthread.

    Note, this is just a quick fix that can be backported to stable. A real
    fix is to have a better synchronization between the shutdown of old
    threads and the starting of new ones.

    Link: https://lore.kernel.org/all/20240820130001.124768-1-tglozar@redhat.com/

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
    Link: https://lore.kernel.org/20240905085330.45985730@gandalf.local.home
    Fixes: e88ed227f639e ("tracing/timerlat: Add user-space interface")
    Reported-by: Tomas Glozar <tglozar@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-09-10 14:07:02 +02:00
Tomas Glozar b1cffb0ea3 tracing/osnoise: Use a cpumask to know what threads are kthreads
JIRA: https://issues.redhat.com/browse/RHEL-39968

commit 177e1cc2f41235c145041eed03ef5bab18f32328
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Wed Sep 4 10:34:28 2024 -0400

    tracing/osnoise: Use a cpumask to know what threads are kthreads

    The start_kthread() and stop_thread() code was not always called with the
    interface_lock held. This means that the kthread variable could be
    unexpectedly changed causing the kthread_stop() to be called on it when it
    should not have been, leading to:

     while true; do
       rtla timerlat top -u -q & PID=$!;
       sleep 5;
       kill -INT $PID;
       sleep 0.001;
       kill -TERM $PID;
       wait $PID;
      done

    Causing the following OOPS:

     Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] PREEMPT SMP KASAN PTI
     KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
     CPU: 5 UID: 0 PID: 885 Comm: timerlatu/5 Not tainted 6.11.0-rc4-test-00002-gbc754cc76d1b-dirty #125 a533010b71dab205ad2f507188ce8c82203b0254
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
     RIP: 0010:hrtimer_active+0x58/0x300
     Code: 48 c1 ee 03 41 54 48 01 d1 48 01 d6 55 53 48 83 ec 20 80 39 00 0f 85 30 02 00 00 49 8b 6f 30 4c 8d 75 10 4c 89 f0 48 c1 e8 03 <0f> b6 3c 10 4c 89 f0 83 e0 07 83 c0 03 40 38 f8 7c 09 40 84 ff 0f
     RSP: 0018:ffff88811d97f940 EFLAGS: 00010202
     RAX: 0000000000000002 RBX: ffff88823c6b5b28 RCX: ffffed10478d6b6b
     RDX: dffffc0000000000 RSI: ffffed10478d6b6c RDI: ffff88823c6b5b28
     RBP: 0000000000000000 R08: ffff88823c6b5b58 R09: ffff88823c6b5b60
     R10: ffff88811d97f957 R11: 0000000000000010 R12: 00000000000a801d
     R13: ffff88810d8b35d8 R14: 0000000000000010 R15: ffff88823c6b5b28
     FS:  0000000000000000(0000) GS:ffff88823c680000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000561858ad7258 CR3: 000000007729e001 CR4: 0000000000170ef0
     Call Trace:
      <TASK>
      ? die_addr+0x40/0xa0
      ? exc_general_protection+0x154/0x230
      ? asm_exc_general_protection+0x26/0x30
      ? hrtimer_active+0x58/0x300
      ? __pfx_mutex_lock+0x10/0x10
      ? __pfx_locks_remove_file+0x10/0x10
      hrtimer_cancel+0x15/0x40
      timerlat_fd_release+0x8e/0x1f0
      ? security_file_release+0x43/0x80
      __fput+0x372/0xb10
      task_work_run+0x11e/0x1f0
      ? _raw_spin_lock+0x85/0xe0
      ? __pfx_task_work_run+0x10/0x10
      ? poison_slab_object+0x109/0x170
      ? do_exit+0x7a0/0x24b0
      do_exit+0x7bd/0x24b0
      ? __pfx_migrate_enable+0x10/0x10
      ? __pfx_do_exit+0x10/0x10
      ? __pfx_read_tsc+0x10/0x10
      ? ktime_get+0x64/0x140
      ? _raw_spin_lock_irq+0x86/0xe0
      do_group_exit+0xb0/0x220
      get_signal+0x17ba/0x1b50
      ? vfs_read+0x179/0xa40
      ? timerlat_fd_read+0x30b/0x9d0
      ? __pfx_get_signal+0x10/0x10
      ? __pfx_timerlat_fd_read+0x10/0x10
      arch_do_signal_or_restart+0x8c/0x570
      ? __pfx_arch_do_signal_or_restart+0x10/0x10
      ? vfs_read+0x179/0xa40
      ? ksys_read+0xfe/0x1d0
      ? __pfx_ksys_read+0x10/0x10
      syscall_exit_to_user_mode+0xbc/0x130
      do_syscall_64+0x74/0x110
      ? __pfx___rseq_handle_notify_resume+0x10/0x10
      ? __pfx_ksys_read+0x10/0x10
      ? fpregs_restore_userregs+0xdb/0x1e0
      ? fpregs_restore_userregs+0xdb/0x1e0
      ? syscall_exit_to_user_mode+0x116/0x130
      ? do_syscall_64+0x74/0x110
      ? do_syscall_64+0x74/0x110
      ? do_syscall_64+0x74/0x110
      entry_SYSCALL_64_after_hwframe+0x71/0x79
     RIP: 0033:0x7ff0070eca9c
     Code: Unable to access opcode bytes at 0x7ff0070eca72.
     RSP: 002b:00007ff006dff8c0 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
     RAX: 0000000000000000 RBX: 0000000000000005 RCX: 00007ff0070eca9c
     RDX: 0000000000000400 RSI: 00007ff006dff9a0 RDI: 0000000000000003
     RBP: 00007ff006dffde0 R08: 0000000000000000 R09: 00007ff000000ba0
     R10: 00007ff007004b08 R11: 0000000000000246 R12: 0000000000000003
     R13: 00007ff006dff9a0 R14: 0000000000000007 R15: 0000000000000008
      </TASK>
     Modules linked in: snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec snd_hwdep snd_hda_core
     ---[ end trace 0000000000000000 ]---

    This is because it would mistakenly call kthread_stop() on a user space
    thread making it "exit" before it actually exits.

    Since kthreads are created based on global behavior, use a cpumask to know
    when kthreads are running and that they need to be shutdown before
    proceeding to do new work.

    Link: https://lore.kernel.org/all/20240820130001.124768-1-tglozar@redhat.com/

    This was debugged by using the persistent ring buffer:

    Link: https://lore.kernel.org/all/20240823013902.135036960@goodmis.org/

    Note, locking was originally used to fix this, but that proved to cause too
    many deadlocks to work around:

      https://lore.kernel.org/linux-trace-kernel/20240823102816.5e55753b@gandalf.local.home/

    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
    Link: https://lore.kernel.org/20240904103428.08efdf4c@gandalf.local.home
    Fixes: e88ed227f639e ("tracing/timerlat: Add user-space interface")
    Reported-by: Tomas Glozar <tglozar@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Tomas Glozar <tglozar@redhat.com>
2024-09-10 14:06:48 +02:00
Luis Claudio R. Goncalves c171ce3587 rtla/osnoise: set the default threshold to 1us
JIRA: https://issues.redhat.com/browse/RHEL-50869

Conflicts:
	Documentation/trace/osnoise-tracer.rst

commit c40583e19eebae50f6b024d8285d2703e2522364
Author: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
Date:   Mon Jun 10 10:23:14 2024 -0300

    rtla/osnoise: set the default threshold to 1us

    Change the default threshold for osnoise to 1us, so that any noise
    equal or above this value is recorded. Let the user set a higher
    threshold if necessary.

    Link: https://lore.kernel.org/linux-trace-kernel/Zmb-QhiiiI6jM9To@uudg.org

    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Suggested-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Reviewed-by: Clark Williams <williams@redhat.com>
    Signed-off-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
    Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
2024-08-13 20:42:06 -03:00
John Kacur e3d9cfd763 tracing/timerlat: Move hrtimer_init to timerlat_fd open()
JIRA: https://issues.redhat.com/browse/RHEL-28655

commit 1389358bb008e7625942846e9f03554319b7fecc
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu Feb 1 16:13:39 2024 +0100

tracing/timerlat: Move hrtimer_init to timerlat_fd open()

	tracing/timerlat: Move hrtimer_init to timerlat_fd open()

	Currently, the timerlat's hrtimer is initialized at the first read of
	timerlat_fd, and destroyed at close(). It works, but it causes an error
	if the user program open() and close() the file without reading.

	Here's an example:

	 # echo NO_OSNOISE_WORKLOAD > /sys/kernel/debug/tracing/osnoise/options
	 # echo timerlat > /sys/kernel/debug/tracing/current_tracer

	 # cat <<EOF > ./timerlat_load.py
	 # !/usr/bin/env python3

	 timerlat_fd = open("/sys/kernel/tracing/osnoise/per_cpu/cpu0/timerlat_fd", 'r')
	 timerlat_fd.close();
	 EOF

	 # ./taskset -c 0 ./timerlat_load.py
	<BOOM>

	 BUG: kernel NULL pointer dereference, address: 0000000000000010
	 #PF: supervisor read access in kernel mode
	 #PF: error_code(0x0000) - not-present page
	 PGD 0 P4D 0
	 Oops: 0000 [#1] PREEMPT SMP NOPTI
	 CPU: 1 PID: 2673 Comm: python3 Not tainted 6.6.13-200.fc39.x86_64 #1
	 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-1.fc39 04/01/2014
	 RIP: 0010:hrtimer_active+0xd/0x50
	 Code: 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 0f 1f 44 00 00 48 8b 57 30 <8b> 42 10 a8 01 74 09 f3 90 8b 42 10 a8 01 75 f7 80 7f 38 00 75 1d
	 RSP: 0018:ffffb031009b7e10 EFLAGS: 00010286
	 RAX: 000000000002db00 RBX: ffff9118f786db08 RCX: 0000000000000000
	 RDX: 0000000000000000 RSI: ffff9117a0e64400 RDI: ffff9118f786db08
	 RBP: ffff9118f786db80 R08: ffff9117a0ddd420 R09: ffff9117804d4f70
	 R10: 0000000000000000 R11: 0000000000000000 R12: ffff9118f786db08
	 R13: ffff91178fdd5e20 R14: ffff9117840978c0 R15: 0000000000000000
	 FS:  00007f2ffbab1740(0000) GS:ffff9118f7840000(0000) knlGS:0000000000000000
	 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
	 CR2: 0000000000000010 CR3: 00000001b402e000 CR4: 0000000000750ee0
	 PKRU: 55555554
	 Call Trace:
	  <TASK>
	  ? __die+0x23/0x70
	  ? page_fault_oops+0x171/0x4e0
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? avc_has_extended_perms+0x237/0x520
	  ? exc_page_fault+0x7f/0x180
	  ? asm_exc_page_fault+0x26/0x30
	  ? hrtimer_active+0xd/0x50
	  hrtimer_cancel+0x15/0x40
	  timerlat_fd_release+0x48/0xe0
	  __fput+0xf5/0x290
	  __x64_sys_close+0x3d/0x80
	  do_syscall_64+0x60/0x90
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? __x64_sys_ioctl+0x72/0xd0
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? syscall_exit_to_user_mode+0x2b/0x40
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? do_syscall_64+0x6c/0x90
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? exit_to_user_mode_prepare+0x142/0x1f0
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? syscall_exit_to_user_mode+0x2b/0x40
	  ? srso_alias_return_thunk+0x5/0x7f
	  ? do_syscall_64+0x6c/0x90
	  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
	 RIP: 0033:0x7f2ffb321594
	 Code: 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 80 3d d5 cd 0d 00 00 74 13 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 3c c3 0f 1f 00 55 48 89 e5 48 83 ec 10 89 7d
	 RSP: 002b:00007ffe8d8eef18 EFLAGS: 00000202 ORIG_RAX: 0000000000000003
	 RAX: ffffffffffffffda RBX: 00007f2ffba4e668 RCX: 00007f2ffb321594
	 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000003
	 RBP: 00007ffe8d8eef40 R08: 0000000000000000 R09: 0000000000000000
	 R10: 55c926e3167eae79 R11: 0000000000000202 R12: 0000000000000003
	 R13: 00007ffe8d8ef030 R14: 0000000000000000 R15: 00007f2ffba4e668
	  </TASK>
	 CR2: 0000000000000010
	 ---[ end trace 0000000000000000 ]---

	Move hrtimer_init to timerlat_fd open() to avoid this problem.

	Link: https://lore.kernel.org/linux-trace-kernel/7324dd3fc0035658c99b825204a66049389c56e3.1706798888.git.bristot@kernel.org

	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
	Cc: stable@vger.kernel.org
	Fixes: e88ed227f639 ("tracing/timerlat: Add user-space interface")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2024-03-08 13:49:15 -05:00
Scott Weaver 2f15af9b6f Merge: Backport Timerlat UserSpace and Cgroup Support
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/3462

JIRA: https://issues.redhat.com/browse/RHEL-14932

**Commit List:**
- `e88ed227f639` - [tracing/timerlat: Add user-space interface](COMMIT_LINK_HERE)
- `cb7ca871c883` - [tracing/osnoise: Skip running osnoise if all instances are off](COMMIT_LINK_HERE)
- `4998e7fda149` - [tracing/osnoise: Switch from PF_NO_SETAFFINITY to migrate_disable](COMMIT_LINK_HERE)

**Description:**
This merge request backports the necessary kernel modifications to introduce user-space and cgroup support for the rtla user-space tool. These changes align the rtla kernel base with version v6.4, enabling more robust and versatile performance analysis and monitoring.

**Key Enhancements:**
- A user-space interface for the timerlat tracer is now available, allowing for the rtla tool to also measure latency introduced by userspace.
- Add a cgroup interface to migrate the kthreads to the same cgroup as the userspace tool.

Please review the individual commits for detailed information on the changes and their impact.

Signed-off-by: Chris White <chwhite@redhat.com>

Approved-by: John Kacur <jkacur@redhat.com>
Approved-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>

Signed-off-by: Scott Weaver <scweaver@redhat.com>
2023-12-12 12:42:07 -05:00
Chris White 0618a5f139 tracing/timerlat: Add user-space interface
JIRA: https://issues.redhat.com/browse/RHEL-14932
Upstream Status: v6.4

commit e88ed227f639ebcb31ed4e5b88756b47d904584b
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue Jun 6 17:12:27 2023 +0200

tracing/timerlat: Add user-space interface

Going a step further, we propose a way to use any user-space
workload as the task waiting for the timerlat timer. This is done
via a per-CPU file named osnoise/cpu$id/timerlat_fd file.

The tracef_fd allows a task to open at a time. When a task reads
the file, the timerlat timer is armed for future osnoise/timerlat_period_us
time. When the timer fires, it prints the IRQ latency and
wakes up the user-space thread waiting in the timerlat_fd.

The thread then starts to run, executes the timerlat measurement, prints
the thread scheduling latency and returns to user-space.

When the thread rereads the timerlat_fd, the tracer will print the
user-ret(urn) latency, which is an additional metric.

This additional metric is also traced by the tracer and can be used, for
example of measuring the context switch overhead from kernel-to-user and
user-to-kernel, or the response time for an arbitrary execution in
user-space.

The tracer supports one thread per CPU, the thread must be pinned to
the CPU, and it cannot migrate while holding the timerlat_fd. The reason
is that the tracer is per CPU (nothing prohibits the tracer from
allowing migrations in the future). The tracer monitors the migration
of the thread and disables the tracer if detected.

The timerlat_fd is only available for opening/reading when timerlat
tracer is enabled, and NO_OSNOISE_WORKLOAD is set.

The simplest way to activate this feature from user-space is:

 -------------------------------- %< -----------------------------------
 int main(void)
 {
	char buffer[1024];
	int timerlat_fd;
	int retval;
	long cpu = 0;	/* place in CPU 0 */
	cpu_set_t set;

	CPU_ZERO(&set);
	CPU_SET(cpu, &set);

	if (sched_setaffinity(gettid(), sizeof(set), &set) == -1)
		return 1;

	snprintf(buffer, sizeof(buffer),
		"/sys/kernel/tracing/osnoise/per_cpu/cpu%ld/timerlat_fd",
		cpu);

	timerlat_fd = open(buffer, O_RDONLY);
	if (timerlat_fd < 0) {
		printf("error opening %s: %s\n", buffer, strerror(errno));
		exit(1);
	}

	for (;;) {
		retval = read(timerlat_fd, buffer, 1024);
		if (retval < 0)
			break;
	}

	close(timerlat_fd);
	exit(0);
}
 -------------------------------- >% -----------------------------------

When disabling timerlat, if there is a workload holding the timerlat_fd,
the SIGKILL will be sent to the thread.

Link: https://lkml.kernel.org/r/69fe66a863d2792ff4c3a149bf9e32e26468bb3a.1686063934.git.bristot@kernel.org

Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: William White <chwhite@redhat.com>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chris White <chwhite@redhat.com>
2023-12-05 20:53:20 +00:00
Chris White e66afa7528 tracing/osnoise: Skip running osnoise if all instances are off
JIRA: https://issues.redhat.com/browse/RHEL-14932
Upstream Status: v6.4

commit cb7ca871c883eed5132e106cda44b2b060e6f52e
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue Jun 6 17:12:26 2023 +0200

tracing/osnoise: Skip running osnoise if all instances are off

In the case of all tracing instances being off, sleep for the entire
period.

 Q: Why not kill all threads so?
 A: It is valid and useful to start the threads with tracing off.
For example, rtla disables tracing, starts the tracer, applies the
scheduling setup to the threads, e.g., sched priority and cgroup,
and then begin tracing with all set.

Skipping the period helps to speed up rtla setup and save the
trace after a stop tracing.

Link: https://lkml.kernel.org/r/aa4dd9b7e76fcb63901fe5407e15ec002b318599.1686063934.git.bristot@kernel.org

Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: William White <chwhite@redhat.com>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chris White <chwhite@redhat.com>
2023-12-05 20:49:59 +00:00
Chris White c41ae01fad tracing/osnoise: Switch from PF_NO_SETAFFINITY to migrate_disable
JIRA: https://issues.redhat.com/browse/RHEL-14932
Upstream Status: v6.4

commit 4998e7fda149d2392ea6aa9879299d8a32019dbe
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue Jun 6 17:12:25 2023 +0200

tracing/osnoise: Switch from PF_NO_SETAFFINITY to migrate_disable

Currently, osnoise/timerlat threads run with PF_NO_SETAFFINITY set.
It works well, however, cgroups do not allow PF_NO_SETAFFINITY threads
to be accepted, and this creates a limitation to osnoise/timerlat.

To avoid this limitation, disable migration of the threads as soon
as they start to run, and then clean the PF_NO_SETAFFINITY flag (still)
used during thread creation.

If for some reason a thread migration is requested, e.g., via
sched_settafinity, the tracer thread will notice and exit.

Link: https://lkml.kernel.org/r/8ba8bc9c15b3ea40cf73cf67a9bc061a264609f0.1686063934.git.bristot@kernel.org

Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: William White <chwhite@redhat.com>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chris White <chwhite@redhat.com>
2023-12-05 20:49:41 +00:00
John Kacur 9f5fe46043 tracing/timerlat: Always wakeup the timerlat thread
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit 632478a05821bc1c9b55c3a1dd0fb1be7bfa1acc
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu May 11 18:32:01 2023 +0200

	tracing/timerlat: Always wakeup the timerlat thread

	While testing rtla timerlat auto analysis, I reach a condition where
	the interface was not receiving tracing data. I was able to manually
	reproduce the problem with these steps:

	  # echo 0 > tracing_on                 # disable trace
	  # echo 1 > osnoise/stop_tracing_us    # stop trace if timerlat irq > 1 us
	  # echo timerlat > current_tracer      # enable timerlat tracer
	  # sleep 1                             # wait... that is the time when rtla
						# apply configs like prio or cgroup
	  # echo 1 > tracing_on                 # start tracing
	  # cat trace
	  # tracer: timerlat
	  #
	  #                                _-----=> irqs-off
	  #                               / _----=> need-resched
	  #                              | / _---=> hardirq/softirq
	  #                              || / _--=> preempt-depth
	  #                              ||| / _-=> migrate-disable
	  #                              |||| /     delay
	  #                              |||||            ACTIVATION
	  #           TASK-PID      CPU# |||||   TIMESTAMP   ID            CONTEXT                 LATENCY
	  #              | |         |   |||||      |         |                  |                       |
		NOTHING!

	Then, trying to enable tracing again with echo 1 > tracing_on resulted
	in no change: the trace was still not tracing.

	This problem happens because the timerlat IRQ hits the stop tracing
	condition while tracing is off, and do not wake up the timerlat thread,
	so the timerlat threads are kept sleeping forever, resulting in no
	trace, even after re-enabling the tracer.

	Avoid this condition by always waking up the threads, even after stopping
	tracing, allowing the tracer to return to its normal operating after
	a new tracing on.

	Link: https://lore.kernel.org/linux-trace-kernel/1ed8f830638b20a39d535d27d908e319a9a3c4e2.1683822622.git.bristot@kernel.org

	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: stable@vger.kernel.org
	Fixes: a955d7eac1 ("trace: Add timerlat tracer")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:49:28 -05:00
John Kacur 2fc9c3a634 tracing: Rename kvfree_rcu() to kvfree_rcu_mightsleep()
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit cae16f2c2e11c60c888715f4d98c12740683d6a2
Author: Uladzislau Rezki (Sony) <urezki@gmail.com>
Date:   Wed Feb 1 16:08:10 2023 +0100

	tracing: Rename kvfree_rcu() to kvfree_rcu_mightsleep()

	The kvfree_rcu() macro's single-argument form is deprecated.  Therefore
	switch to the new kvfree_rcu_mightsleep() variant. The goal is to
	avoid accidental use of the single-argument forms, which can introduce
	functionality bugs in atomic contexts and latency bugs in non-atomic
	contexts.

	Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
	Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Acked-by: Paul E. McKenney <paulmck@kernel.org>
	Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
	Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
	Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:47:23 -05:00
John Kacur 78408cd863 tracing/osnoise: Fix notify new tracing_max_latency
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit d3cba7f02cd82118c32651c73374d8a5a459d9a6
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Wed Mar 29 17:50:16 2023 +0200

	tracing/osnoise: Fix notify new tracing_max_latency

	osnoise/timerlat tracers are reporting new max latency on instances
	where the tracing is off, creating inconsistencies between the max
	reported values in the trace and in the tracing_max_latency. Thus
	only report new tracing_max_latency on active tracing instances.

	Link: https://lkml.kernel.org/r/ecd109fde4a0c24ab0f00ba1e9a144ac19a91322.1680104184.git.bristot@kernel.org

	Cc: stable@vger.kernel.org
	Fixes: dae181349f1e ("tracing/osnoise: Support a list of trace_array *tr")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:46:30 -05:00
John Kacur 1120a3c5b7 tracing/timerlat: Notify new max thread latency
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit b9f451a9029a16eb7913ace09b92493d00f2e564
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Wed Mar 29 17:50:15 2023 +0200

	tracing/timerlat: Notify new max thread latency

	timerlat is not reporting a new tracing_max_latency for the thread
	latency. The reason is that it is not calling notify_new_max_latency()
	function after the new thread latency is sampled.

	Call notify_new_max_latency() after computing the thread latency.

	Link: https://lkml.kernel.org/r/16e18d61d69073d0192ace07bf61e405cca96e9c.1680104184.git.bristot@kernel.org

	Cc: stable@vger.kernel.org
	Fixes: dae181349f1e ("tracing/osnoise: Support a list of trace_array *tr")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:45:00 -05:00
John Kacur 8591f5e165 tracing/osnoise: set several trace_osnoise.c variables storage-class-specifier to static
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit 7a025e066e0f0afd39cc88a089929ccb945ce9e8
Author: Tom Rix <trix@redhat.com>
Date:   Thu Mar 9 10:04:14 2023 -0500

	tracing/osnoise: set several trace_osnoise.c variables storage-class-specifier to static

	smatch reports several similar warnings
	kernel/trace/trace_osnoise.c:220:1: warning:
	  symbol '__pcpu_scope_per_cpu_osnoise_var' was not declared. Should it be static?
	kernel/trace/trace_osnoise.c:243:1: warning:
	  symbol '__pcpu_scope_per_cpu_timerlat_var' was not declared. Should it be static?
	kernel/trace/trace_osnoise.c:335:14: warning:
	  symbol 'interface_lock' was not declared. Should it be static?
	kernel/trace/trace_osnoise.c:2242:5: warning:
	  symbol 'timerlat_min_period' was not declared. Should it be static?
	kernel/trace/trace_osnoise.c:2243:5: warning:
	  symbol 'timerlat_max_period' was not declared. Should it be static?

	These variables are only used in trace_osnoise.c, so it should be static

	Link: https://lore.kernel.org/linux-trace-kernel/20230309150414.4036764-1-trix@redhat.com

	Signed-off-by: Tom Rix <trix@redhat.com>
	Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
	Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:43:20 -05:00
John Kacur 773f3a6d9b trace/osnoise: make use of the helper function kthread_run_on_cpu()
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit 11e4e3523da98c065a6c249013ace0d388e41c25
Author: Cai Huoqing <cai.huoqing@linux.dev>
Date:   Fri Jan 14 14:03:06 2022 -0800

	trace/osnoise: make use of the helper function kthread_run_on_cpu()

	Replace kthread_create_on_cpu/wake_up_process() with kthread_run_on_cpu()
	to simplify the code.

	Link: https://lkml.kernel.org/r/20211022025711.3673-6-caihuoqing@baidu.com
	Signed-off-by: Cai Huoqing <caihuoqing@baidu.com>
	Cc: Bernard Metzler <bmt@zurich.ibm.com>
	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Davidlohr Bueso <dave@stgolabs.net>
	Cc: Doug Ledford <dledford@redhat.com>
	Cc: Ingo Molnar <mingo@redhat.com>
	Cc: Jason Gunthorpe <jgg@ziepe.ca>
	Cc: Joel Fernandes (Google) <joel@joelfernandes.org>
	Cc: Josh Triplett <josh@joshtriplett.org>
	Cc: Lai Jiangshan <jiangshanlai@gmail.com>
	Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
	Cc: "Paul E . McKenney" <paulmck@kernel.org>
	Cc: Steven Rostedt <rostedt@goodmis.org>
	Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
	Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:34:16 -05:00
John Kacur a296d20d63 tracing: Switch to kvfree_rcu() API
JIRA: https://issues.redhat.com/browse/RHEL-16305

commit a6ed2aee54644cfa2d04ca86308767f5c3a087e8
Author: Uladzislau Rezki (Sony) <urezki@gmail.com>
Date:   Wed Nov 24 12:03:08 2021 +0100

	tracing: Switch to kvfree_rcu() API

	Instead of invoking a synchronize_rcu() to free a pointer
	after a grace period we can directly make use of new API
	that does the same but in more efficient way.

	Link: https://lkml.kernel.org/r/20211124110308.2053-10-urezki@gmail.com

	Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
	Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-11-30 14:20:46 -05:00
John Kacur fef0c0b033 tracing/osnoise: No need for schedule_hrtimeout range
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit b18c58af29e465d21d4cd9e8c5008ae0e0147384
Author: Davidlohr Bueso <dave@stgolabs.net>
Date:   Mon Jan 23 15:46:49 2023 -0800

	tracing/osnoise: No need for schedule_hrtimeout range

	No slack time is being passed, just use schedule_hrtimeout().

	Link: https://lore.kernel.org/linux-trace-kernel/20230123234649.17968-1-dave@stgolabs.net

	Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
	Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:29:04 -04:00
John Kacur 799428ebdf tracing/osnoise: Use built-in RCU list checking
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 685b64e4d6da4be8b4595654a57db663b3d1dfc2
Author: Chuang Wang <nashuiliang@gmail.com>
Date:   Tue Dec 27 10:30:36 2022 +0800

	tracing/osnoise: Use built-in RCU list checking

	list_for_each_entry_rcu() has built-in RCU and lock checking.

	Pass cond argument to list_for_each_entry_rcu() to silence false lockdep
	warning when CONFIG_PROVE_RCU_LIST is enabled.

	Execute as follow:

	 [tracing]# echo osnoise > current_tracer
	 [tracing]# echo 1 > tracing_on
	 [tracing]# echo 0 > tracing_on

	The trace_types_lock is held when osnoise_tracer_stop() or
	timerlat_tracer_stop() are called in the non-RCU read side section.
	So, pass lockdep_is_held(&trace_types_lock) to silence false lockdep
	warning.

	Link: https://lkml.kernel.org/r/20221227023036.784337-1-nashuiliang@gmail.com

	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Fixes: dae181349f1e ("tracing/osnoise: Support a list of trace_array *tr")
	Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Chuang Wang <nashuiliang@gmail.com>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:29:04 -04:00
John Kacur 29eb0a0586 tracing/osnoise: Add preempt and/or irq disabled options
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit b5dce2002567a9b1a83ef3e3a8678d8c32be2a78
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Fri Dec 9 23:05:53 2022 +0100

	tracing/osnoise: Add preempt and/or irq disabled options

	The osnoise workload runs with preemption and IRQs enabled in such
	a way as to allow all sorts of noise to disturb osnoise's execution.
	hwlat tracer has a similar workload but works with irq disabled,
	allowing only NMIs and the hardware to generate noise.

	While thinking about adding an options file to hwlat tracer to
	allow the system to panic, and other features I was thinking
	to add, like having a tracepoint at each noise detection, it
	came to my mind that is easier to make osnoise and also do
	hardware latency detection than making hwlat "feature compatible"
	with osnoise.

	Other points are:
	 - osnoise already has an independent cpu file.
	 - osnoise has a more intuitive interface, e.g., runtime/period vs.
	   window/width (and people often need help remembering what it is).
	 - osnoise: tracepoints
	 - osnoise stop options
	 - osnoise options file itself

	Moreover, the user-space side (in rtla) is simplified by reusing the
	existing osnoise code.

	Finally, people have been asking me about using osnoise for hw latency
	detection, and I have to explain that it was sufficient but not
	necessary. These options make it sufficient and necessary.

	Adding a Suggested-by Clark, as he often asked me about this
	possibility.

	Link: https://lkml.kernel.org/r/d9c6c19135497054986900f94c8e47410b15316a.1670623111.git.bristot@kernel.org

	Cc: Suggested-by: Clark Williams <williams@redhat.com>
	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: Bagas Sanjaya <bagasdotme@gmail.com>
	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Jonathan Corbet <corbet@lwn.net>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:29:04 -04:00
John Kacur 90a6ced789 tracing/osnoise: Add PANIC_ON_STOP option
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 1603dda47714cebe8a29b2154407da7a929d13f4
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Fri Dec 9 23:05:52 2022 +0100

	tracing/osnoise: Add PANIC_ON_STOP option

	Often the latency observed in a CPU is not caused by the work being done
	in the CPU itself, but by work done on another CPU that causes the
	hardware to stall all CPUs. In this case, it is interesting to know
	what is happening on ALL CPUs, and the best way to do this is via
	crash dump analysis.

	Add the PANIC_ON_STOP option to osnoise/timerlat tracers. The default
	behavior is having this option off. When enabled by the user, the system
	will panic after hitting a stop tracing condition.

	This option was motivated by a real scenario that Juri Lelli and I
	were debugging.

	Link: https://lkml.kernel.org/r/249ce4287c6725543e6db845a6e0df621dc67db5.1670623111.git.bristot@kernel.org

	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: Clark Williams <williams@redhat.com>
	Cc: Bagas Sanjaya <bagasdotme@gmail.com>
	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Jonathan Corbet <corbet@lwn.net>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:29:04 -04:00
John Kacur fa4e2dd646 tracing/osnoise: Make osnoise_options static
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit ec370890f92ba8ad5476a34068655b06ba48def7
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Mon Dec 5 09:27:38 2022 +0100

	tracing/osnoise: Make osnoise_options static

	Make osnoise_options static, as reported by the kernel test robot.

	Link: https://lkml.kernel.org/r/63255826485400d7a2270e9c5e66111079671e7a.1670228712.git.bristot@kernel.org

	Reported-by: kernel test robot <lkp@intel.com>
	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Steven Rostedt <rostedt@goodmis.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:28:57 -04:00
John Kacur ccd1a35b8e tracing/osnoise: Add OSNOISE_WORKLOAD option
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 30838fcd81078d078b10209bc18a6357ba4dd5fa
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu Nov 17 14:46:19 2022 +0100

	tracing/osnoise: Add OSNOISE_WORKLOAD option

	The osnoise tracer is not only a tracer, and a set of tracepoints,
	but also a workload dispatcher.

	In preparation for having other workloads, e.g., in user-space,
	add an option to avoid dispatching the workload.

	By not dispatching the workload, the osnoise: tracepoints become
	generic events to measure the execution time of *any* task on Linux.

	For example:

	  # cd /sys/kernel/tracing/
	  # cat osnoise/options
	  DEFAULTS OSNOISE_WORKLOAD
	  # echo NO_OSNOISE_WORKLOAD > osnoise/options
	  # cat osnoise/options
	  NO_DEFAULTS NO_OSNOISE_WORKLOAD
	  # echo osnoise > set_event
	  # echo osnoise > current_tracer
	  # tail -8 trace
	      make-94722   [002] d..3.  1371.794507: thread_noise:     make:94722 start 1371.794302286 duration 200897 ns
		sh-121042  [020] d..3.  1371.794534: thread_noise:       sh:121042 start 1371.781610976 duration 8943683 ns
	      make-121097  [005] d..3.  1371.794542: thread_noise:     make:121097 start 1371.794481522 duration 60444 ns
	     <...>-40      [005] d..3.  1371.794550: thread_noise: migration/5:40 start 1371.794542256 duration 7154 ns
	    <idle>-0       [018] dNh2.  1371.794554: irq_noise: reschedule:253 start 1371.794553547 duration 40 ns
	    <idle>-0       [018] dNh2.  1371.794561: irq_noise: local_timer:236 start 1371.794556222 duration 4890 ns
	    <idle>-0       [018] .Ns2.  1371.794563: softirq_noise:    SCHED:7 start 1371.794561803 duration 992 ns
	    <idle>-0       [018] d..3.  1371.794566: thread_noise: swapper/18:0 start 1371.781368110 duration 13191798 ns

	In preparation for the rtla exec_time tracer/tool and
	rtla osnoise --user option.

	Link: https://lkml.kernel.org/r/f5cfbd37aefd419eefe9243b4d2fc38ed5753fe4.1668692096.git.bristot@kernel.org

	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Jonathan Corbet <corbet@lwn.net>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:28:54 -04:00
John Kacur 6bd9ce4cf4 tracing/osnoise: Add osnoise/options file
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit b179d48b6aab21f3999f5006685ea4254c0618a9
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu Nov 17 14:46:18 2022 +0100

	tracing/osnoise: Add osnoise/options file

	Add the tracing/osnoise/options file to control
	osnoise/timerlat tracer features. It is a single
	file to contain multiple features, similar to
	the sched/features file.

	Reading the file displays a list of options. Writing
	the OPTION_NAME enables it, writing NO_OPTION_NAME disables
	it.

	The DEAFULTS is a particular option that resets the options
	to the default ones.

	It uses a bitmask to keep track of the status of the option. When
	needed, we can add a list of static keys, but for now
	it does not justify the memory increase.

	Link: https://lkml.kernel.org/r/f8d34aefdb225d2603fcb4c02a120832a0cd3339.1668692096.git.bristot@kernel.org

	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Jonathan Corbet <corbet@lwn.net>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 16:28:46 -04:00
John Kacur b2a1fc731c tracing/osnoise: Fix duration type
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 022632f6c43a86f2135642dccd5686de318e861d
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu Nov 17 14:46:17 2022 +0100

	tracing/osnoise: Fix duration type

	The duration type is a 64 long value, not an int. This was
	causing some long noise to report wrong values.

	Change the duration to a 64 bits value.

	Link: https://lkml.kernel.org/r/a93d8a8378c7973e9c609de05826533c9e977939.1668692096.git.bristot@kernel.org

	Cc: stable@vger.kernel.org
	Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
	Cc: Steven Rostedt <rostedt@goodmis.org>
	Cc: Masami Hiramatsu <mhiramat@kernel.org>
	Cc: Jonathan Corbet <corbet@lwn.net>
	Fixes: bce29ac9ce ("trace: Add osnoise tracer")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 12:53:45 -04:00
John Kacur e7261b9ca8 tracing/osnoise: Fix possible recursive locking in stop_per_cpu_kthreads
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 99ee9317a1305cd5626736785c8cb38b0e47686c
Author: Nico Pache <npache@redhat.com>
Date:   Mon Sep 19 08:49:32 2022 -0600

	tracing/osnoise: Fix possible recursive locking in stop_per_cpu_kthreads

	There is a recursive lock on the cpu_hotplug_lock.

	In kernel/trace/trace_osnoise.c:<start/stop>_per_cpu_kthreads:
	    - start_per_cpu_kthreads calls cpus_read_lock() and if
		start_kthreads returns a error it will call stop_per_cpu_kthreads.
	    - stop_per_cpu_kthreads then calls cpus_read_lock() again causing
	      deadlock.

	Fix this by calling cpus_read_unlock() before calling
	stop_per_cpu_kthreads. This behavior can also be seen in commit
	f46b16520a ("trace/hwlat: Implement the per-cpu mode").

	This error was noticed during the LTP ftrace-stress-test:

	WARNING: possible recursive locking detected
	--------------------------------------------
	sh/275006 is trying to acquire lock:
	ffffffffb02f5400 (cpu_hotplug_lock){++++}-{0:0}, at: stop_per_cpu_kthreads

	but task is already holding lock:
	ffffffffb02f5400 (cpu_hotplug_lock){++++}-{0:0}, at: start_per_cpu_kthreads

	other info that might help us debug this:
	 Possible unsafe locking scenario:

	      CPU0
	      ----
	 lock(cpu_hotplug_lock);
	 lock(cpu_hotplug_lock);

	 *** DEADLOCK ***

	May be due to missing lock nesting notation

	3 locks held by sh/275006:
	 #0: ffff8881023f0470 (sb_writers#24){.+.+}-{0:0}, at: ksys_write
	 #1: ffffffffb084f430 (trace_types_lock){+.+.}-{3:3}, at: rb_simple_write
	 #2: ffffffffb02f5400 (cpu_hotplug_lock){++++}-{0:0}, at: start_per_cpu_kthreads

	Link: https://lkml.kernel.org/r/20220919144932.3064014-1-npache@redhat.com

	Fixes: c8895e271f ("trace/osnoise: Support hotplug operations")
	Signed-off-by: Nico Pache <npache@redhat.com>
	Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 12:53:24 -04:00
John Kacur 6df074e74a tracing/timerlat: Do not wakeup the thread if the trace stops at the IRQ
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 9c556e5a4dd5cfc0939a0575577d0517118f98af
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue May 10 11:45:25 2022 +0200

	tracing/timerlat: Do not wakeup the thread if the trace stops at the IRQ

	There is no need to wakeup the timerlat/ thread if stop tracing is hit
	at the timerlat's IRQ handler.

	Return before waking up timerlat's thread.

	Link: https://lkml.kernel.org/r/b392356c91b56aedd2b289513cc56a84cf87e60d.1652175637.git.bristot@kernel.org

	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: Clark Williams <williams@redhat.com>
	Cc: Ingo Molnar <mingo@redhat.com>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 12:53:07 -04:00
John Kacur e9f89ceecd tracing/timerlat: Print stacktrace in the IRQ handler if needed
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit 4dd2aea24ed7613735664feadc9879d37f718c23
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue May 10 11:45:24 2022 +0200

	tracing/timerlat: Print stacktrace in the IRQ handler if needed

	If print_stack and stop_tracing_us are set, and stop_tracing_us is hit
	with latency higher than or equal to print_stack, print the
	stack at the IRQ handler as it is useful to define the root cause for
	the IRQ latency.

	Link: https://lkml.kernel.org/r/fd04530ce98ae9270e41bb124ee5bf67b05ecfed.1652175637.git.bristot@kernel.org

	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: Clark Williams <williams@redhat.com>
	Cc: Ingo Molnar <mingo@redhat.com>
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 12:52:41 -04:00
John Kacur 11accd2a94 tracing/timerlat: Notify IRQ new max latency only if stop tracing is set
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2174944

commit aa748949b4e665f473bc5abdc5f66029cb5f5522
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Tue May 10 11:45:23 2022 +0200

	tracing/timerlat: Notify IRQ new max latency only if stop tracing is set

	Currently, the notification of a new max latency is sent from
	timerlat's IRQ handler anytime a new max latency is found.

	While this behavior is not wrong, the send IPI overhead itself
	will increase the thread latency and that is not the desired
	effect (tracing overhead).

	Moreover, the thread will notify a new max latency again because
	the thread latency as it is always higher than the IRQ latency
	that woke it up.

	The only case in which it is helpful to notify a new max latency
	from IRQ is when stop tracing (for the IRQ) is set, as in this
	case, the thread will not be dispatched.

	Notify a new max latency from the IRQ handler only if stop tracing is
	set for the IRQ handler.

	Link: https://lkml.kernel.org/r/2c2d9a56c0886c8402ba320de32856cbbb10c2bb.1652175637.git.bristot@kernel.org

	Cc: Juri Lelli <juri.lelli@redhat.com>
	Cc: Ingo Molnar <mingo@redhat.com>
	Reported-by: Clark Williams <williams@redhat.com>
	Fixes: a955d7eac1 ("trace: Add timerlat tracer")
	Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
	Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: John Kacur <jkacur@redhat.com>
2023-05-23 12:52:14 -04:00
Phil Auld 5087f87023 sched/tracing: Append prev_state to tp args instead
Bugzilla: https://bugzilla.redhat.com/2078906
Conflicts: Skipped one hunk, in samples, due to not having 3a73333fb370
("tracing: Add TRACE_CUSTOM_EVENT() macro").

commit 9c2136be0878c88c53dea26943ce40bb03ad8d8d
Author: Delyan Kratunov <delyank@fb.com>
Date:   Wed May 11 18:28:36 2022 +0000

    sched/tracing: Append prev_state to tp args instead

    Commit fa2c3254d7cf (sched/tracing: Don't re-read p->state when emitting
    sched_switch event, 2022-01-20) added a new prev_state argument to the
    sched_switch tracepoint, before the prev task_struct pointer.

    This reordering of arguments broke BPF programs that use the raw
    tracepoint (e.g. tp_btf programs). The type of the second argument has
    changed and existing programs that assume a task_struct* argument
    (e.g. for bpf_task_storage access) will now fail to verify.

    If we instead append the new argument to the end, all existing programs
    would continue to work and can conditionally extract the prev_state
    argument on supported kernel versions.

    Fixes: fa2c3254d7cf (sched/tracing: Don't re-read p->state when emitting sched_switch event, 2022-01-20)
    Signed-off-by: Delyan Kratunov <delyank@fb.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Link: https://lkml.kernel.org/r/c8a6930dfdd58a4a5755fc01732675472979732b.camel@fb.com

Signed-off-by: Phil Auld <pauld@redhat.com>
2022-06-02 09:20:55 -04:00
Jerome Marchand e1aa287ab8 tracing/osnoise: Force quiescent states while tracing
Bugzilla: https://bugzilla.redhat.com/2069708

commit caf4c86bf136845982c5103b2661751b40c474c0
Author: Nicolas Saenz Julienne <nsaenzju@redhat.com>
Date:   Mon Mar 7 19:07:40 2022 +0100

    tracing/osnoise: Force quiescent states while tracing

    At the moment running osnoise on a nohz_full CPU or uncontested FIFO
    priority and a PREEMPT_RCU kernel might have the side effect of
    extending grace periods too much. This will entice RCU to force a
    context switch on the wayward CPU to end the grace period, all while
    introducing unwarranted noise into the tracer. This behaviour is
    unavoidable as overly extending grace periods might exhaust the system's
    memory.

    This same exact problem is what extended quiescent states (EQS) were
    created for, conversely, rcu_momentary_dyntick_idle() emulates them by
    performing a zero duration EQS. So let's make use of it.

    In the common case rcu_momentary_dyntick_idle() is fairly inexpensive:
    atomically incrementing a local per-CPU counter and doing a store. So it
    shouldn't affect osnoise's measurements (which has a 1us granularity),
    so we'll call it unanimously.

    The uncommon case involve calling rcu_momentary_dyntick_idle() after
    having the osnoise process:

     - Receive an expedited quiescent state IPI with preemption disabled or
       during an RCU critical section. (activates rdp->cpu_no_qs.b.exp
       code-path).

     - Being preempted within in an RCU critical section and having the
       subsequent outermost rcu_read_unlock() called with interrupts
       disabled. (t->rcu_read_unlock_special.b.blocked code-path).

    Neither of those are possible at the moment, and are unlikely to be in
    the future given the osnoise's loop design. On top of this, the noise
    generated by the situations described above is unavoidable, and if not
    exposed by rcu_momentary_dyntick_idle() will be eventually seen in
    subsequent rcu_read_unlock() calls or schedule operations.

    Link: https://lkml.kernel.org/r/20220307180740.577607-1-nsaenzju@redhat.com

    Cc: stable@vger.kernel.org
    Fixes: bce29ac9ce ("trace: Add osnoise tracer")
    Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
    Acked-by: Paul E. McKenney <paulmck@kernel.org>
    Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:24 +02:00
Jerome Marchand c8322245c1 tracing/osnoise: Do not unregister events twice
Bugzilla: https://bugzilla.redhat.com/2069708

commit f0cfe17bcc1dd2f0872966b554a148e888833ee9
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Wed Mar 9 14:13:02 2022 +0100

    tracing/osnoise: Do not unregister events twice

    Nicolas reported that using:

     # trace-cmd record -e all -M 10 -p osnoise --poll

    Resulted in the following kernel warning:

     ------------[ cut here ]------------
     WARNING: CPU: 0 PID: 1217 at kernel/tracepoint.c:404 tracepoint_probe_unregister+0x280/0x370
     [...]
     CPU: 0 PID: 1217 Comm: trace-cmd Not tainted 5.17.0-rc6-next-20220307-nico+ #19
     RIP: 0010:tracepoint_probe_unregister+0x280/0x370
     [...]
     CR2: 00007ff919b29497 CR3: 0000000109da4005 CR4: 0000000000170ef0
     Call Trace:
      <TASK>
      osnoise_workload_stop+0x36/0x90
      tracing_set_tracer+0x108/0x260
      tracing_set_trace_write+0x94/0xd0
      ? __check_object_size.part.0+0x10a/0x150
      ? selinux_file_permission+0x104/0x150
      vfs_write+0xb5/0x290
      ksys_write+0x5f/0xe0
      do_syscall_64+0x3b/0x90
      entry_SYSCALL_64_after_hwframe+0x44/0xae
     RIP: 0033:0x7ff919a18127
     [...]
     ---[ end trace 0000000000000000 ]---

    The warning complains about an attempt to unregister an
    unregistered tracepoint.

    This happens on trace-cmd because it first stops tracing, and
    then switches the tracer to nop. Which is equivalent to:

      # cd /sys/kernel/tracing/
      # echo osnoise > current_tracer
      # echo 0 > tracing_on
      # echo nop > current_tracer

    The osnoise tracer stops the workload when no trace instance
    is actually collecting data. This can be caused both by
    disabling tracing or disabling the tracer itself.

    To avoid unregistering events twice, use the existing
    trace_osnoise_callback_enabled variable to check if the events
    (and the workload) are actually active before trying to
    deactivate them.

    Link: https://lore.kernel.org/all/c898d1911f7f9303b7e14726e7cc9678fbfb4a0e.camel@redhat.com/
    Link: https://lkml.kernel.org/r/938765e17d5a781c2df429a98f0b2e7cc317b022.1646823913.git.bristot@kernel.org

    Cc: stable@vger.kernel.org
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Fixes: 2fac8d6486d5 ("tracing/osnoise: Allow multiple instances of the same tracer")
    Reported-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:24 +02:00
Jerome Marchand da015ea77c tracing/osnoise: Make osnoise_main to sleep for microseconds
Bugzilla: https://bugzilla.redhat.com/2069708

commit dd990352f01ee9a6c6eee152e5d11c021caccfe4
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Fri Feb 18 16:17:38 2022 +0100

    tracing/osnoise: Make osnoise_main to sleep for microseconds

    osnoise's runtime and period are in the microseconds scale, but it is
    currently sleeping in the millisecond's scale. This behavior roots in the
    usage of hwlat as the skeleton for osnoise.

    Make osnoise to sleep in the microseconds scale. Also, move the sleep to
    a specialized function.

    Link: https://lkml.kernel.org/r/302aa6c7bdf2d131719b22901905e9da122a11b2.1645197336.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:24 +02:00
Jerome Marchand 0af2d71624 tracing/osnoise: Properly unhook events if start_per_cpu_kthreads() fails
Bugzilla: https://bugzilla.redhat.com/2069708

commit 0878355b51f5f26632e652c848a8e174bb02d22d
Author: Nikita Yushchenko <nikita.yushchenko@virtuozzo.com>
Date:   Sun Jan 9 18:34:59 2022 +0300

    tracing/osnoise: Properly unhook events if start_per_cpu_kthreads() fails

    If start_per_cpu_kthreads() called from osnoise_workload_start() returns
    error, event hooks are left in broken state: unhook_irq_events() called
    but unhook_thread_events() and unhook_softirq_events() not called, and
    trace_osnoise_callback_enabled flag not cleared.

    On the next tracer enable, hooks get not installed due to
    trace_osnoise_callback_enabled flag.

    And on the further tracer disable an attempt to remove non-installed
    hooks happened, hitting a WARN_ON_ONCE() in tracepoint_remove_func().

    Fix the error path by adding the missing part of cleanup.
    While at this, introduce osnoise_unhook_events() to avoid code
    duplication between this error path and normal tracer disable.

    Link: https://lkml.kernel.org/r/20220109153459.3701773-1-nikita.yushchenko@virtuozzo.com

    Cc: stable@vger.kernel.org
    Fixes: bce29ac9ce ("trace: Add osnoise tracer")
    Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Nikita Yushchenko <nikita.yushchenko@virtuozzo.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:24 +02:00
Jerome Marchand 6fe70e6842 tracing/osnoise: Make osnoise_instances static
Bugzilla: https://bugzilla.redhat.com/2069708

commit d7458bc0d8b409460713228d2ed279addb38947a
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Thu Nov 11 23:07:42 2021 +0100

    tracing/osnoise: Make osnoise_instances static

    Make the struct list_head osnoise_instances definition static.

    Link: https://lore.kernel.org/all/202111120052.ZuikQSJi-lkp@intel.com/
    Link: https://lkml.kernel.org/r/d001f0eeac66e2b2eeec7d2a15e9e7abede0453a.1636667971.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Fixes: dae181349f1e ("tracing/osnoise: Support a list of trace_array *tr")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:24 +02:00
Jerome Marchand b346af1a15 tracing/osnoise: Remove PREEMPT_RT ifdefs from inside functions
Bugzilla: https://bugzilla.redhat.com/2069708

commit 01e181c776fddf3a9e7a2ef229cc6e7ddf126fe7
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:05:04 2021 +0100

    tracing/osnoise: Remove PREEMPT_RT ifdefs from inside functions

    Remove CONFIG_PREEMPT_RT from inside functions, avoiding
    compilation problems in the future.

    Link: https://lkml.kernel.org/r/37ee0881b033cdc513efc84ebea26cf77880c8c2.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand 9905cee0b3 tracing/osnoise: Remove STACKTRACE ifdefs from inside functions
Bugzilla: https://bugzilla.redhat.com/2069708

commit b14f4568d391c3b9bda9c078a32977e3f939f020
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:05:03 2021 +0100

    tracing/osnoise: Remove STACKTRACE ifdefs from inside functions

    Remove CONFIG_STACKTRACE from inside functions, avoiding
    compilation problems in the future.

    Link: https://lkml.kernel.org/r/3465cca2f28e1ba602a1fc8bdb28d12950b5226e.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand b8e17f20fc tracing/osnoise: Allow multiple instances of the same tracer
Bugzilla: https://bugzilla.redhat.com/2069708

commit 2fac8d6486d5c34e2ec7028580142b8209da3f92
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:05:02 2021 +0100

    tracing/osnoise: Allow multiple instances of the same tracer

    Currently, the user can start only one instance of timerlat/osnoise
    tracers and the tracers cannot run in parallel.

    As starting point to add more flexibility, let's allow the same tracer to
    run on different trace instances. The workload will start when the first
    trace_array (instance) is registered and stop when the last instance
    is unregistered.

    So, while this patch allows the same tracer to run in multiple
    instances (e.g., two instances running osnoise), it still does not allow
    instances of timerlat and osnoise in parallel (e.g., one timerlat and
    osnoise). That is because the osnoise: events have different behavior
    depending on which tracer is enabled (osnoise or timerlat). Enabling
    the parallel usage of these two tracers is in my TODO list.

    Link: https://lkml.kernel.org/r/38c8f14b613492a4f3f938d9d3bf0b063b72f0f0.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand 52522c0b89 tracing/osnoise: Remove TIMERLAT ifdefs from inside functions
Bugzilla: https://bugzilla.redhat.com/2069708

commit ccb6754495ef253af5e1253434f0d21b6225c4ad
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:05:01 2021 +0100

    tracing/osnoise: Remove TIMERLAT ifdefs from inside functions

    Remove CONFIG_TIMERLAT_TRACER from inside functions, avoiding
    compilation problems in the future.

    Link: https://lkml.kernel.org/r/8245abb5a112d249f5da6c1df499244ad9e647bc.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand a91d059f01 tracing/osnoise: Support a list of trace_array *tr
Bugzilla: https://bugzilla.redhat.com/2069708

commit dae181349f1e9d279f171afc708d2824ab35a86f
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:05:00 2021 +0100

    tracing/osnoise: Support a list of trace_array *tr

    osnoise/timerlat were built to run a single instance, and for this,
    a single variable is enough to store the current struct trace_array
    *tr with information about the tracing instance. This is done via
    the *osnoise_trace variable. A trace_array represents a trace instance.

    In preparation to support multiple instances, replace the
    *osnoise_trace variable with an RCU protected list of instances.

    The operations that refer to an instance now propagate to all
    elements of the list (all instances).

    Also, replace the osnoise_busy variable with a check if the list
    has elements (busy).

    No functional change is expected with this patch, i.e., only one
    instance is allowed yet.

    Link: https://lkml.kernel.org/r/91d006e889b9a5d1ff258fe6077f021ae3f26372.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand 236947fa80 tracing/osnoise: Use start/stop_per_cpu_kthreads() on osnoise_cpus_write()
Bugzilla: https://bugzilla.redhat.com/2069708

commit 2bd1bdf01fb25906f18cd8ebfac81c2217d1478a
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:04:59 2021 +0100

    tracing/osnoise: Use start/stop_per_cpu_kthreads() on osnoise_cpus_write()

    When writing a new CPU mask via osnoise/cpus, if the tracer is running,
    the workload is restarted to follow the new cpumask. The restart is
    currently done using osnoise_workload_start/stop(), which disables the
    workload *and* the instrumentation. However, disabling the
    instrumentation is not necessary.

    Calling start/stop_per_cpu_kthreads() is enough to apply the new
    osnoise/cpus config.

    Link: https://lkml.kernel.org/r/ee633e82867c5b88851aa6040522a799c0034486.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand ac34ad963e tracing/osnoise: Split workload start from the tracer start
Bugzilla: https://bugzilla.redhat.com/2069708

commit 15ca4bdb0327b35e09682a0f7975e21688f54306
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:04:58 2021 +0100

    tracing/osnoise: Split workload start from the tracer start

    In preparation from supporting multiple trace instances, create
    workload start/stop specific functions.

    No functional change.

    Link: https://lkml.kernel.org/r/74b090971e9acdd13625be1c28ef3270d2275e77.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand 9678f0d78a tracing/osnoise: Improve comments about barrier need for NMI callbacks
Bugzilla: https://bugzilla.redhat.com/2069708

commit c3b6343c0dc4a76f838e25391f6f1cdb25cfbb8c
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:04:57 2021 +0100

    tracing/osnoise: Improve comments about barrier need for NMI callbacks

    trace_osnoise_callback_enabled is used by ftrace_nmi_enter/exit()
    to know when to call the NMI callback. The barrier is used to
    avoid having callbacks enabled before the resetting date during
    the start or to touch the values after stopping the tracer.

    Link: https://lkml.kernel.org/r/a413b8f14aa9312fbd1ba99f96225a8aed831053.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand f00bdb6fab tracing/osnoise: Do not follow tracing_cpumask
Bugzilla: https://bugzilla.redhat.com/2069708

commit 66df27f19f7dacae471f7214df5bab93d6f88b5f
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Sun Oct 31 19:04:56 2021 +0100

    tracing/osnoise: Do not follow tracing_cpumask

    In preparation to support multiple instances, decouple the
    osnoise/timelat workload from instance-specific tracing_cpumask.

    Different instances can have conflicting cpumasks, making osnoise
    workload management needlessly complex. Osnoise already has its
    global cpumask.

    I also thought about using the first instance mask, but the
    "first" instance could be removed before the others.

    This also fixes the problem that changing the tracing_mask was not
    re-starting the trace.

    Link: https://lkml.kernel.org/r/169a71bcc919ce3ab53ae6f9ca5cde57fffaf9c6.1635702894.git.bristot@kernel.org

    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: linux-rt-users@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand 0114d82779 trace/timerlat: Add migrate-disabled field to the timerlat header
Bugzilla: https://bugzilla.redhat.com/2069708

commit aeafcb82d99c97ff5c6054a4091eeb12aefca9ab
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Fri Oct 15 17:07:51 2021 +0200

    trace/timerlat: Add migrate-disabled field to the timerlat header

    Since "54357f0c9149 tracing: Add migrate-disabled counter to tracing
    output," the migrate disabled field is also printed in the !PREEMPR_RT
    kernel config. While this information was added to the vast majority of
    tracers, osnoise and timerlat were not updated (because they are new
    tracers).

    Fix timerlat header by adding the information about migrate disabled.

    Link: https://lkml.kernel.org/r/bc0c234ab49946cdd63effa6584e1d5e8662cb44.1634308385.git.bristot@kernel.org

    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: x86@kernel.org
    Cc: linux-doc@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Fixes: 54357f0c9149 ("tracing: Add migrate-disabled counter to tracing output.")
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00
Jerome Marchand e04b4f79c1 trace/osnoise: Add migrate-disabled field to the osnoise header
Bugzilla: https://bugzilla.redhat.com/2069708

commit e0f3b18be733ac4a3b6deb2ff586bc1936ad0368
Author: Daniel Bristot de Oliveira <bristot@kernel.org>
Date:   Fri Oct 15 17:07:50 2021 +0200

    trace/osnoise: Add migrate-disabled field to the osnoise header

    Since "54357f0c9149 tracing: Add migrate-disabled counter to tracing
    output," the migrate disabled field is also printed in the !PREEMPR_RT
    kernel config. While this information was added to the vast majority of
    tracers, osnoise and timerlat were not updated (because they are new
    tracers).

    Fix osnoise header by adding the information about migrate disabled.

    Link: https://lkml.kernel.org/r/9cb3d54e29e0588dbba12e81486bd8a09adcd8ca.1634308385.git.bristot@kernel.org

    Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: x86@kernel.org
    Cc: linux-doc@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Fixes: 54357f0c9149 ("tracing: Add migrate-disabled counter to tracing output.")
    Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
2022-05-16 09:14:23 +02:00