• Linus Torvalds's avatar
    Merge tag 'trace-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace · ad584d73
    Linus Torvalds authored
    Pull tracing updates from Steven Rostedt:
     "Main user visible change:
    
       - User events can now have "multi formats"
    
         The current user events have a single format. If another event is
         created with a different format, it will fail to be created. That
         is, once an event name is used, it cannot be used again with a
         different format. This can cause issues if a library is using an
         event and updates its format. An application using the older format
         will prevent an application using the new library from registering
         its event.
    
         A task could also DOS another application if it knows the event
         names, and it creates events with different formats.
    
         The multi-format event is in a different name space from the single
         format. Both the event name and its format are the unique
         identifier. This will allow two different applications to use the
         same user event name but with different payloads.
    
       - Added support to have ftrace_dump_on_oops dump out instances and
         not just the main top level tracing buffer.
    
      Other changes:
    
       - Add eventfs_root_inode
    
         Only the root inode has a dentry that is static (never goes away)
         and stores it upon creation. There's no reason that the thousands
         of other eventfs inodes should have a pointer that never gets set
         in its descriptor. Create a eventfs_root_inode desciptor that has a
         eventfs_inode descriptor and a dentry pointer, and only the root
         inode will use this.
    
       - Added WARN_ON()s in eventfs
    
         There's some conditionals remaining in eventfs that should never be
         hit, but instead of removing them, add WARN_ON() around them to
         make sure that they are never hit.
    
       - Have saved_cmdlines allocation also include the map_cmdline_to_pid
         array
    
         The saved_cmdlines structure allocates a large amount of data to
         hold its mappings. Within it, it has three arrays. Two are already
         apart of it: map_pid_to_cmdline[] and saved_cmdlines[]. More memory
         can be saved by also including the map_cmdline_to_pid[] array as
         well.
    
       - Restructure __string() and __assign_str() macros used in
         TRACE_EVENT()
    
         Dynamic strings in TRACE_EVENT() are declared with:
    
             __string(name, source)
    
         And assigned with:
    
            __assign_str(name, source)
    
         In the tracepoint callback of the event, the __string() is used to
         get the size needed to allocate on the ring buffer and
         __assign_str() is used to copy the string into the ring buffer.
         There's a helper structure that is created in the TRACE_EVENT()
         macro logic that will hold the string length and its position in
         the ring buffer which is created by __string().
    
         There are several trace events that have a function to create the
         string to save. This function is executed twice. Once for
         __string() and again for __assign_str(). There's no reason for
         this. The helper structure could also save the string it used in
         __string() and simply copy that into __assign_str() (it also
         already has its length).
    
         By using the structure to store the source string for the
         assignment, it means that the second argument to __assign_str() is
         no longer needed.
    
         It will be removed in the next merge window, but for now add a
         warning if the source string given to __string() is different than
         the source string given to __assign_str(), as the source to
         __assign_str() isn't even used and will be going away.
    
       - Added checks to make sure that the source of __string() is also the
         source of __assign_str() so that it can be safely removed in the
         next merge window.
    
         Included fixes that the above check found.
    
       - Other minor clean ups and fixes"
    
    * tag 'trace-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: (34 commits)
      tracing: Add __string_src() helper to help compilers not to get confused
      tracing: Use strcmp() in __assign_str() WARN_ON() check
      tracepoints: Use WARN() and not WARN_ON() for warnings
      tracing: Use div64_u64() instead of do_div()
      tracing: Support to dump instance traces by ftrace_dump_on_oops
      tracing: Remove second parameter to __assign_rel_str()
      tracing: Add warning if string in __assign_str() does not match __string()
      tracing: Add __string_len() example
      tracing: Remove __assign_str_len()
      ftrace: Fix most kernel-doc warnings
      tracing: Decrement the snapshot if the snapshot trigger fails to register
      tracing: Fix snapshot counter going between two tracers that use it
      tracing: Use EVENT_NULL_STR macro instead of open coding "(null)"
      tracing: Use ? : shortcut in trace macros
      tracing: Do not calculate strlen() twice for __string() fields
      tracing: Rework __assign_str() and __string() to not duplicate getting the string
      cxl/trace: Properly initialize cxl_poison region name
      net: hns3: tracing: fix hclgevf trace event strings
      drm/i915: Add missing ; to __assign_str() macros in tracepoint code
      NFSD: Fix nfsd_clid_class use of __string_len() macro
      ...
    ad584d73
kernel.rst 54.8 KB