• Tom Zanussi's avatar
    tracing/histogram: Fix stacktrace key · f5914b30
    Tom Zanussi authored
    The current code will always use the current stacktrace as a key even
    if a stacktrace contained in a specific event field was specified.
    
    For example, we expect to use the 'unsigned long[] stack' field in the
    below event in the histogram:
    
      # echo 's:block_lat pid_t pid; u64 delta; unsigned long[] stack;' > /sys/kernel/debug/tracing/dynamic_events
      # echo 'hist:keys=delta.buckets=100,stack.stacktrace:sort=delta' > /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger
    
    But in fact, when we type out the trigger, we see that it's using the
    plain old global 'stacktrace' as the key, which is just the stacktrace
    when the event was hit and not the stacktrace contained in the event,
    which is what we want:
    
      # cat /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger
      hist:keys=delta.buckets=100,stacktrace:vals=hitcount:sort=delta.buckets=100:size=2048 [active]
    
    And in fact, there's no code to actually retrieve it from the event,
    so we need to add HIST_FIELD_FN_STACK and hist_field_stack() to get it
    and hook it into the trigger code.  For now, since the stack is just
    using dynamic strings, this could just use the dynamic string
    function, but it seems cleaner to have a dedicated function an be able
    to tweak independently as necessary.
    
    Link: https://lkml.kernel.org/r/11aa614c82976adbfa4ea763dbe885b5fb01d59c.1676063532.git.zanussi@kernel.orgSigned-off-by: default avatarTom Zanussi <zanussi@kernel.org>
    [ Fixed 32bit build warning reported by kernel test robot <lkp@intel.com> ]
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    f5914b30
trace_events_hist.c 167 KB