Skip to content
Permalink
Sai-Prakash-Ra…
Switch branches/tags

Commits on Nov 15, 2021

  1. arm64/io: Add a header for mmio access instrumentation

    The new generic header mmio-instrumented.h will keep arch code clean
    and separate from instrumented version which traces mmio register
    accesses. This instrumented header is generic and can be used by other
    architectures as well. Also add a generic flag (__DISABLE_TRACE_MMIO__)
    which is used to disable MMIO tracing in nVHE and if required can be
    used to disable tracing for specific drivers.
    
    Signed-off-by: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
    Sai Prakash Ranjan authored and intel-lab-lkp committed Nov 15, 2021
  2. tracing: Add register read/write tracing support

    Generic MMIO read/write i.e., __raw_{read,write}{b,l,w,q} accessors
    are typically used to read/write from/to memory mapped registers
    and can cause hangs or some undefined behaviour in following few
    cases,
    
    * If the access to the register space is unclocked, for example: if
      there is an access to multimedia(MM) block registers without MM
      clocks.
    
    * If the register space is protected and not set to be accessible from
      non-secure world, for example: only EL3 (EL: Exception level) access
      is allowed and any EL2/EL1 access is forbidden.
    
    * If xPU(memory/register protection units) is controlling access to
      certain memory/register space for specific clients.
    
    and more...
    
    Such cases usually results in instant reboot/SErrors/NOC or interconnect
    hangs and tracing these register accesses can be very helpful to debug
    such issues during initial development stages and also in later stages.
    
    So use ftrace trace events to log such MMIO register accesses which
    provides rich feature set such as early enablement of trace events,
    filtering capability, dumping ftrace logs on console and many more.
    
    Sample output:
    
    rwmmio_read: gic_peek_irq+0xd0/0xd8 readl addr=0xffff800010040104
    rwmmio_write: gic_poke_irq+0xe4/0xf0 writel addr=0xffff800010040184
    rwmmio_read: gic_do_wait_for_rwp+0x54/0x90 readl addr=0xffff800010040000
    rwmmio_write: gic_set_affinity+0x1bc/0x1e8 writeq addr=0xffff800010046130
    
    Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
    [saiprakash: Rewrote commit msg and trace event field edits]
    Signed-off-by: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
    Prasad Sodagudi authored and intel-lab-lkp committed Nov 15, 2021
  3. tracing: Add length protection to histogram string copies

    The string copies to the histogram storage has a max size of 256 bytes
    (defined by MAX_FILTER_STR_VAL). Only the string size of the event field
    needs to be copied to the event storage, but no more than what is in the
    event storage. Although nothing should be bigger than 256 bytes, there's
    no protection against overwriting of the storage if one day there is.
    
    Copy no more than the destination size, and enforce it.
    
    Also had to turn MAX_FILTER_STR_VAL into an unsigned int, to keep the
    min() comparison of the string sizes of comparable types.
    
    Link: https://lore.kernel.org/all/CAHk-=wjREUihCGrtRBwfX47y_KrLCGjiq3t6QtoNJpmVrAEb1w@mail.gmail.com/
    Link: https://lkml.kernel.org/r/20211114132834.183429a4@rorschach.local.home
    
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
    Fixes: 63f84ae ("tracing/histogram: Do not copy the fixed-size char array field over the field size")
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    rostedt committed Nov 15, 2021

Commits on Nov 12, 2021

  1. tracing/histogram: Fix check for missing operands in an expression

    If a binary operation is detected while parsing an expression string,
    the operand strings are deduced by splitting the experssion string at
    the position of the detected binary operator. Both operand strings are
    sub-strings (can be empty string) of the expression string but will
    never be NULL.
    
    Currently a NULL check is used for missing operands, fix this by
    checking for empty strings instead.
    
    Link: https://lkml.kernel.org/r/20211112191324.1302505-1-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Fixes: 9710b2f ("tracing: Fix operator precedence for hist triggers expression")
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Nov 12, 2021
  2. tracing/histogram: Do not copy the fixed-size char array field over t…

    …he field size
    
    Do not copy the fixed-size char array field of the events over
    the field size. The histogram treats char array as a string and
    there are 2 types of char array in the event, fixed-size and
    dynamic string. The dynamic string (__data_loc) field must be
    null terminated, but the fixed-size char array field may not
    be null terminated (not a string, but just a data).
    In that case, histogram can copy the data after the field.
    This uses the original field size for fixed-size char array
    field to restrict the histogram not to access over the original
    field size.
    
    Link: https://lkml.kernel.org/r/163673292822.195747.3696966210526410250.stgit@devnote2
    
    Fixes: 02205a6 (tracing: Add support for 'field variables')
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    mhiramat authored and rostedt committed Nov 12, 2021
  3. 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: dae1813 ("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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 12, 2021

Commits on Nov 10, 2021

  1. ftrace/direct: Fix lockup in modify_ftrace_direct_multi

    We can't call unregister_ftrace_function under ftrace_lock.
    
    Link: https://lkml.kernel.org/r/20211109114217.1645296-1-jolsa@kernel.org
    
    Fixes: ed29271 ("ftrace/direct: Do not disable when switching direct callers")
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Jiri Olsa authored and rostedt committed Nov 10, 2021
  2. ring-buffer: Protect ring_buffer_reset() from reentrancy

    The resetting of the entire ring buffer use to simply go through and reset
    each individual CPU buffer that had its own protection and synchronization.
    But this was very slow, due to performing a synchronization for each CPU.
    The code was reshuffled to do one disabling of all CPU buffers, followed
    by a single RCU synchronization, and then the resetting of each of the CPU
    buffers. But unfortunately, the mutex that prevented multiple occurrences
    of resetting the buffer was not moved to the upper function, and there is
    nothing to protect from it.
    
    Take the ring buffer mutex around the global reset.
    
    Cc: stable@vger.kernel.org
    Fixes: b23d7a5 ("ring-buffer: speed up buffer resets by avoiding synchronize_rcu for each CPU")
    Reported-by: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    rostedt committed Nov 10, 2021

Commits on Nov 2, 2021

  1. ftrace/samples: Add missing prototype for my_direct_func

    There's compilation fail reported kernel test robot for W=1 build:
    
      >> samples/ftrace/ftrace-direct-multi.c:8:6: warning: no previous
      prototype for function 'my_direct_func' [-Wmissing-prototypes]
         void my_direct_func(unsigned long ip)
    
    The inlined assembly is used outside function, so we can't make
    my_direct_func static and pass it as asm input argument.
    
    However my_tramp is already extern so I think there's no problem
    keeping my_direct_func extern as well and just add its prototype.
    
    Link: https://lkml.kernel.org/r/20211101153907.377668-1-jolsa@kernel.org
    
    Reported-by: kernel test robot <lkp@intel.com>
    Fixes: 5fae941 ("ftrace/samples: Add multi direct interface test module")
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Jiri Olsa authored and rostedt committed Nov 2, 2021
  2. tracing/selftests: Add tests for hist trigger expression parsing

    Add tests for the parsing of hist trigger expressions; and to
    validate expression evaluation.
    
    Link: https://lkml.kernel.org/r/20211029183339.3216491-5-kaleshsingh@google.com
    
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Nov 2, 2021
  3. tracing/histogram: Document hist trigger variables

    Update the tracefs README to describe how hist trigger variables
    can be created.
    
    Link: https://lkml.kernel.org/r/20211029183339.3216491-4-kaleshsingh@google.com
    
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Nov 2, 2021
  4. tracing/histogram: Update division by 0 documentation

    If the divisor is a constant and zero, the undeifned case can be
    detected and an error returned instead of -1.
    
    Link: https://lkml.kernel.org/r/20211029183339.3216491-3-kaleshsingh@google.com
    
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Tom Zanussi <zanussi@kernel.org>
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Nov 2, 2021
  5. tracing/histogram: Optimize division by constants

    If the divisor is a constant use specific division functions to
    avoid extra branches when the trigger is hit.
    
    If the divisor constant but not a power of 2, the division can be
    replaced with a multiplication and shift in the following case:
    
    Let X = dividend and Y = divisor.
    
    Choose Z = some power of 2. If Y <= Z, then:
        X / Y = (X * (Z / Y)) / Z
    
    (Z / Y) is a constant (mult) which is calculated at parse time, so:
        X / Y = (X * mult) / Z
    
    The division by Z can be replaced by a shift since Z is a power of 2:
        X / Y = (X * mult) >> shift
    
    As long, as X < Z the results will not be off by more than 1.
    
    Link: https://lkml.kernel.org/r/20211029232410.3494196-1-kaleshsingh@google.com
    
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Nov 2, 2021

Commits on Nov 1, 2021

  1. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  2. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  3. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  4. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  5. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  6. tracing/osnoise: Use start/stop_per_cpu_kthreads() on osnoise_cpus_wr…

    …ite()
    
    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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  7. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  8. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021
  9. 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>
    Daniel Bristot de Oliveira authored and rostedt committed Nov 1, 2021

Commits on Oct 30, 2021

  1. tracing/histogram: Fix semicolon.cocci warnings

    kernel/trace/trace_events_hist.c:6039:2-3: Unneeded semicolon
    
     Remove unneeded semicolon.
    
    Generated by: scripts/coccinelle/misc/semicolon.cocci
    
    Link: https://lkml.kernel.org/r/20211030005615.GA41257@3074f0d39c61
    
    Fixes: c5eac6e ("tracing/histogram: Simplify handling of .sym-offset in expressions")
    CC: Kalesh Singh <kaleshsingh@google.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    intel-lab-lkp authored and rostedt committed Oct 30, 2021

Commits on Oct 29, 2021

  1. tracing/histogram: Fix documentation inline emphasis warning

    This fixes the warning:
    
    Documentation/trace/histogram.rst:1766: WARNING: Inline emphasis
    start-string without end-string
    
    The issue was caused by an unescaped '*' character.
    
    Link: https://lore.kernel.org/all/20211028170548.2597449-1-kaleshsingh@google.com/T/#m77da47432f5cc6521d4294ffdb9621949cc35d04
    Link: https://lkml.kernel.org/r/20211028170548.2597449-1-kaleshsingh@google.com
    
    Fixes: 2d2f6d4 ("tracing/histogram: Document expression arithmetic and constants")
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 29, 2021

Commits on Oct 27, 2021

  1. tracing: Increase PERF_MAX_TRACE_SIZE to handle Sentinel1 and docker …

    …together
    
    Running endpoint security solutions like Sentinel1 that use perf-based
    tracing heavily lead to this repeated dump complaining about dockerd.
    The default value of 2048 is nowhere near not large enough.
    
    Using the prior patch "tracing: show size of requested buffer", we get
    "perf buffer not large enough, wanted 6644, have 6144", after repeated
    up-sizing (I did 2/4/6/8K). With 8K, the problem doesn't occur at all,
    so below is the trace for 6K.
    
    I'm wondering if this value should be selectable at boot time, but this
    is a good starting point.
    
    ```
    ------------[ cut here ]------------
    perf buffer not large enough, wanted 6644, have 6144
    WARNING: CPU: 1 PID: 4997 at kernel/trace/trace_event_perf.c:402 perf_trace_buf_alloc+0x8c/0xa0
    Modules linked in: [..]
    CPU: 1 PID: 4997 Comm: sh Tainted: G                T 5.13.13-x86_64-00039-gb3959163488e torvalds#63
    Hardware name: LENOVO 20KH002JUS/20KH002JUS, BIOS N23ET66W (1.41 ) 09/02/2019
    RIP: 0010:perf_trace_buf_alloc+0x8c/0xa0
    Code: 80 3d 43 97 d0 01 00 74 07 31 c0 5b 5d 41 5c c3 ba 00 18 00 00 89 ee 48 c7 c7 00 82 7d 91 c6 05 25 97 d0 01 01 e8 22 ee bc 00 <0f> 0b 31 c0 eb db 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 55 89
    RSP: 0018:ffffb922026b7d58 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff9da5ee012000 RCX: 0000000000000027
    RDX: ffff9da881657828 RSI: 0000000000000001 RDI: ffff9da881657820
    RBP: 00000000000019f4 R08: 0000000000000000 R09: ffffb922026b7b80
    R10: ffffb922026b7b78 R11: ffffffff91dda688 R12: 000000000000000f
    R13: ffff9da5ee012108 R14: ffff9da8816570a0 R15: ffffb922026b7e30
    FS:  00007f420db1a080(0000) GS:ffff9da881640000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000060 CR3: 00000002504a8006 CR4: 00000000003706e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     kprobe_perf_func+0x11e/0x270
     ? do_execveat_common.isra.0+0x1/0x1c0
     ? do_execveat_common.isra.0+0x5/0x1c0
     kprobe_ftrace_handler+0x10e/0x1d0
     0xffffffffc03aa0c8
     ? do_execveat_common.isra.0+0x1/0x1c0
     do_execveat_common.isra.0+0x5/0x1c0
     __x64_sys_execve+0x33/0x40
     do_syscall_64+0x6b/0xc0
     ? do_syscall_64+0x11/0xc0
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    RIP: 0033:0x7f420dc1db37
    Code: ff ff 76 e7 f7 d8 64 41 89 00 eb df 0f 1f 80 00 00 00 00 f7 d8 64 41 89 00 eb dc 0f 1f 84 00 00 00 00 00 b8 3b 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 01 43 0f 00 f7 d8 64 89 01 48
    RSP: 002b:00007ffd4e8b4e38 EFLAGS: 00000246 ORIG_RAX: 000000000000003b
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f420dc1db37
    RDX: 0000564338d1e740 RSI: 0000564338d32d50 RDI: 0000564338d28f00
    RBP: 0000564338d28f00 R08: 0000564338d32d50 R09: 0000000000000020
    R10: 00000000000001b6 R11: 0000000000000246 R12: 0000564338d28f00
    R13: 0000564338d32d50 R14: 0000564338d1e740 R15: 0000564338d28c60
    ---[ end trace 83ab3e8e16275e49 ]---
    ```
    
    Link: https://lkml.kernel.org/r/20210831043723.13481-2-robbat2@gentoo.org
    
    Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    robbat2 authored and rostedt committed Oct 27, 2021
  2. tracing: Show size of requested perf buffer

    If the perf buffer isn't large enough, provide a hint about how large it
    needs to be for whatever is running.
    
    Link: https://lkml.kernel.org/r/20210831043723.13481-1-robbat2@gentoo.org
    
    Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    robbat2 authored and rostedt committed Oct 27, 2021
  3. bootconfig: Initialize ret in xbc_parse_tree()

    The do while loop continues while ret is zero, but ret is never
    initialized. The check for ret in the loop at the while should always be
    initialized, but if an empty string were to be passed in, q would be NULL
    and p would be '\0', and it would break out of the loop without ever
    setting ret.
    
    Set ret to zero, and then xbc_verify_tree() would be called and catch that
    it is an empty tree and report the proper error.
    
    Link: https://lkml.kernel.org/r/20211027105753.6ab9da5f@gandalf.local.home
    
    Fixes: bdac5c2 ("bootconfig: Allocate xbc_data inside xbc_init()")
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    rostedt committed Oct 27, 2021
  4. ftrace: do CPU checking after preemption disabled

    With CONFIG_DEBUG_PREEMPT we observed reports like:
    
      BUG: using smp_processor_id() in preemptible
      caller is perf_ftrace_function_call+0x6f/0x2e0
      CPU: 1 PID: 680 Comm: a.out Not tainted
      Call Trace:
       <TASK>
       dump_stack_lvl+0x8d/0xcf
       check_preemption_disabled+0x104/0x110
       ? optimize_nops.isra.7+0x230/0x230
       ? text_poke_bp_batch+0x9f/0x310
       perf_ftrace_function_call+0x6f/0x2e0
       ...
       __text_poke+0x5/0x620
       text_poke_bp_batch+0x9f/0x310
    
    This telling us the CPU could be changed after task is preempted, and
    the checking on CPU before preemption will be invalid.
    
    Since now ftrace_test_recursion_trylock() will help to disable the
    preemption, this patch just do the checking after trylock() to address
    the issue.
    
    Link: https://lkml.kernel.org/r/54880691-5fe2-33e7-d12f-1fa6136f5183@linux.alibaba.com
    
    CC: Steven Rostedt <rostedt@goodmis.org>
    Cc: Guo Ren <guoren@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: Helge Deller <deller@gmx.de>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Cc: Palmer Dabbelt <palmer@dabbelt.com>
    Cc: Albert Ou <aou@eecs.berkeley.edu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Jiri Kosina <jikos@kernel.org>
    Cc: Miroslav Benes <mbenes@suse.cz>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Joe Lawrence <joe.lawrence@redhat.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Jisheng Zhang <jszhang@kernel.org>
    Reported-by: Abaci <abaci@linux.alibaba.com>
    Signed-off-by: Michael Wang <yun.wang@linux.alibaba.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    wangyun2137 authored and rostedt committed Oct 27, 2021
  5. ftrace: disable preemption when recursion locked

    As the documentation explained, ftrace_test_recursion_trylock()
    and ftrace_test_recursion_unlock() were supposed to disable and
    enable preemption properly, however currently this work is done
    outside of the function, which could be missing by mistake.
    
    And since the internal using of trace_test_and_set_recursion()
    and trace_clear_recursion() also require preemption disabled, we
    can just merge the logical.
    
    This patch will make sure the preemption has been disabled when
    trace_test_and_set_recursion() return bit >= 0, and
    trace_clear_recursion() will enable the preemption if previously
    enabled.
    
    Link: https://lkml.kernel.org/r/13bde807-779c-aa4c-0672-20515ae365ea@linux.alibaba.com
    
    CC: Petr Mladek <pmladek@suse.com>
    Cc: Guo Ren <guoren@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: Helge Deller <deller@gmx.de>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Cc: Palmer Dabbelt <palmer@dabbelt.com>
    Cc: Albert Ou <aou@eecs.berkeley.edu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Jiri Kosina <jikos@kernel.org>
    Cc: Joe Lawrence <joe.lawrence@redhat.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Jisheng Zhang <jszhang@kernel.org>
    CC: Steven Rostedt <rostedt@goodmis.org>
    CC: Miroslav Benes <mbenes@suse.cz>
    Reported-by: Abaci <abaci@linux.alibaba.com>
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Michael Wang <yun.wang@linux.alibaba.com>
    [ Removed extra line in comment - SDR ]
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    wangyun2137 authored and rostedt committed Oct 27, 2021
  6. tracing/histogram: Document expression arithmetic and constants

    Histogram expressions now support division, and multiplication in
    addition to the already supported subtraction and addition operators.
    
    Numeric constants can also be used in a hist trigger expressions
    or assigned to a variable and used by refernce in an expression.
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-9-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Reviewed-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
  7. tracing/histogram: Optimize division by a power of 2

    The division is a slow operation. If the divisor is a power of 2, use a
    shift instead.
    
    Results were obtained using Android's version of perf (simpleperf[1]) as
    described below:
    
    1. hist_field_div() is modified to call 2 test functions:
       test_hist_field_div_[not]_optimized(); passing them the
       same args. Use noinline and volatile to ensure these are
       not optimized out by the compiler.
    2. Create a hist event trigger that uses division:
          events/kmem/rss_stat$ echo 'hist:keys=common_pid:x=size/<divisor>'
             >> trigger
          events/kmem/rss_stat$ echo 'hist:keys=common_pid:vals=$x'
             >> trigger
    3. Run Android's lmkd_test[2] to generate rss_stat events, and
       record CPU samples with Android's simpleperf:
          simpleperf record -a --exclude-perf --post-unwind=yes -m 16384 -g
             -f 2000 -o perf.data
    
    == Results ==
    
    Divisor is a power of 2 (divisor == 32):
    
       test_hist_field_div_not_optimized  | 8,717,091 cpu-cycles
       test_hist_field_div_optimized      | 1,643,137 cpu-cycles
    
    If the divisor is a power of 2, the optimized version is ~5.3x faster.
    
    Divisor is not a power of 2 (divisor == 33):
    
       test_hist_field_div_not_optimized  | 4,444,324 cpu-cycles
       test_hist_field_div_optimized      | 5,497,958 cpu-cycles
    
    If the divisor is not a power of 2, as expected, the optimized version is
    slightly slower (~24% slower).
    
    [1] https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/README.md
    [2] https://cs.android.com/android/platform/superproject/+/master:system/memory/lmkd/tests/lmkd_test.cpp
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-7-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
  8. tracing/histogram: Covert expr to const if both operands are constants

    If both operands of a hist trigger expression are constants, convert the
    expression to a constant. This optimization avoids having to perform the
    same calculation multiple times and also saves on memory since the
    merged constants are represented by a single struct hist_field instead
    or multiple.
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-6-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
  9. tracing/histogram: Simplify handling of .sym-offset in expressions

    The '-' in .sym-offset can confuse the hist trigger arithmetic
    expression parsing. Simplify the handling of this by replacing the
    'sym-offset' with 'symXoffset'. This allows us to correctly evaluate
    expressions where the user may have inadvertently added a .sym-offset
    modifier to one of the operands in an expression, instead of bailing
    out. In this case the .sym-offset has no effect on the evaluation of the
    expression. The only valid use of the .sym-offset is as a hist key
    modifier.
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-5-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
  10. tracing: Fix operator precedence for hist triggers expression

    The current histogram expression evaluation logic evaluates the
    expression from right to left. This can lead to incorrect results
    if the operations are not associative (as is the case for subtraction
    and, the now added, division operators).
    	e.g. 16-8-4-2 should be 2 not 10 --> 16-8-4-2 = ((16-8)-4)-2
    	     64/8/4/2 should be 1 not 16 --> 64/8/4/2 = ((64/8)/4)/2
    
    Division and multiplication are currently limited to single operation
    expression due to operator precedence support not yet implemented.
    
    Rework the expression parsing to support the correct evaluation of
    expressions containing operators of different precedences; and fix
    the associativity error by evaluating expressions with operators of
    the same precedence from left to right.
    
    Examples:
            (1) echo 'hist:keys=common_pid:a=8,b=4,c=2,d=1,w=$a-$b-$c-$d' \
                      >> event/trigger
            (2) echo 'hist:keys=common_pid:x=$a/$b/3/2' >> event/trigger
            (3) echo 'hist:keys=common_pid:y=$a+10/$c*1024' >> event/trigger
            (4) echo 'hist:keys=common_pid:z=$a/$b+$c*$d' >> event/trigger
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-4-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Reviewed-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
  11. tracing: Add division and multiplication support for hist triggers

    Adds basic support for division and multiplication operations for
    hist trigger variable expressions.
    
    For simplicity this patch only supports, division and multiplication
    for a single operation expression (e.g. x=$a/$b), as currently
    expressions are always evaluated right to left. This can lead to some
    incorrect results:
    
    	e.g. echo 'hist:keys=common_pid:x=8-4-2' >> event/trigger
    
    	     8-4-2 should evaluate to 2 i.e. (8-4)-2
    	     but currently x evaluate to  6 i.e. 8-(4-2)
    
    Multiplication and division in sub-expressions will work correctly, once
    correct operator precedence support is added (See next patch in this
    series).
    
    For the undefined case of division by 0, the histogram expression
    evaluates to (u64)(-1). Since this cannot be detected when the
    expression is created, it is the responsibility of the user to be
    aware and account for this possibility.
    
    Examples:
    	echo 'hist:keys=common_pid:a=8,b=4,x=$a/$b' \
                       >> event/trigger
    
    	echo 'hist:keys=common_pid:y=5*$b' \
                       >> event/trigger
    
    Link: https://lkml.kernel.org/r/20211025200852.3002369-3-kaleshsingh@google.com
    
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Kalesh Singh authored and rostedt committed Oct 27, 2021
Older