Skip to content

Commit 31e5f93

Browse files
committed
Merge tag 'trace-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace
Pull tracing updates from Steven Rostedt: - Remove eventfs_file descriptor This is the biggest change, and the second part of making eventfs create its files dynamically. In 6.6 the first part was added, and that maintained a one to one mapping between eventfs meta descriptors and the directories and file inodes and dentries that were dynamically created. The directories were represented by a eventfs_inode and the files were represented by a eventfs_file. In v6.7 the eventfs_file is removed. As all events have the same directory make up (sched_switch has an "enable", "id", "format", etc files), the handing of what files are underneath each leaf eventfs directory is moved back to the tracing subsystem via a callback. When an event is added to the eventfs, it registers an array of evenfs_entry's. These hold the names of the files and the callbacks to call when the file is referenced. The callback gets the name so that the same callback may be used by multiple files. The callback then supplies the filesystem_operations structure needed to create this file. This has brought the memory footprint of creating multiple eventfs instances down by 2 megs each! - User events now has persistent events that are not associated to a single processes. These are privileged events that hang around even if no process is attached to them - Clean up of seq_buf There's talk about using seq_buf more to replace strscpy() and friends. But this also requires some minor modifications of seq_buf to be able to do this - Expand instance ring buffers individually Currently if boot up creates an instance, and a trace event is enabled on that instance, the ring buffer for that instance and the top level ring buffer are expanded (1.4 MB per CPU). This wastes memory as this happens when nothing is using the top level instance - Other minor clean ups and fixes * tag 'trace-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: (34 commits) seq_buf: Export seq_buf_puts() seq_buf: Export seq_buf_putc() eventfs: Use simple_recursive_removal() to clean up dentries eventfs: Remove special processing of dput() of events directory eventfs: Delete eventfs_inode when the last dentry is freed eventfs: Hold eventfs_mutex when calling callback functions eventfs: Save ownership and mode eventfs: Test for ei->is_freed when accessing ei->dentry eventfs: Have a free_ei() that just frees the eventfs_inode eventfs: Remove "is_freed" union with rcu head eventfs: Fix kerneldoc of eventfs_remove_rec() tracing: Have the user copy of synthetic event address use correct context eventfs: Remove extra dget() in eventfs_create_events_dir() tracing: Have trace_event_file have ref counters seq_buf: Introduce DECLARE_SEQ_BUF and seq_buf_str() eventfs: Fix typo in eventfs_inode union comment eventfs: Fix WARN_ON() in create_file_dentry() powerpc: Remove initialisation of readpos tracing/histograms: Simplify last_cmd_set() seq_buf: fix a misleading comment ...
2 parents fd912e4 + 70a9aff commit 31e5f93

File tree

24 files changed

+1278
-692
lines changed

24 files changed

+1278
-692
lines changed

Documentation/trace/user_events.rst

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ Programs can view status of the events via
1414
/sys/kernel/tracing/user_events_status and can both register and write
1515
data out via /sys/kernel/tracing/user_events_data.
1616

17+
Programs can also use /sys/kernel/tracing/dynamic_events to register and
18+
delete user based events via the u: prefix. The format of the command to
19+
dynamic_events is the same as the ioctl with the u: prefix applied. This
20+
requires CAP_PERFMON due to the event persisting, otherwise -EPERM is returned.
21+
1722
Typically programs will register a set of events that they wish to expose to
1823
tools that can read trace_events (such as ftrace and perf). The registration
1924
process tells the kernel which address and bit to reflect if any tool has
@@ -45,7 +50,7 @@ This command takes a packed struct user_reg as an argument::
4550
/* Input: Enable size in bytes at address */
4651
__u8 enable_size;
4752

48-
/* Input: Flags for future use, set to 0 */
53+
/* Input: Flags to use, if any */
4954
__u16 flags;
5055

5156
/* Input: Address to update when enabled */
@@ -69,7 +74,7 @@ The struct user_reg requires all the above inputs to be set appropriately.
6974
This must be 4 (32-bit) or 8 (64-bit). 64-bit values are only allowed to be
7075
used on 64-bit kernels, however, 32-bit can be used on all kernels.
7176

72-
+ flags: The flags to use, if any. For the initial version this must be 0.
77+
+ flags: The flags to use, if any.
7378
Callers should first attempt to use flags and retry without flags to ensure
7479
support for lower versions of the kernel. If a flag is not supported -EINVAL
7580
is returned.
@@ -80,6 +85,13 @@ The struct user_reg requires all the above inputs to be set appropriately.
8085
+ name_args: The name and arguments to describe the event, see command format
8186
for details.
8287

88+
The following flags are currently supported.
89+
90+
+ USER_EVENT_REG_PERSIST: The event will not delete upon the last reference
91+
closing. Callers may use this if an event should exist even after the
92+
process closes or unregisters the event. Requires CAP_PERFMON otherwise
93+
-EPERM is returned.
94+
8395
Upon successful registration the following is set.
8496

8597
+ write_index: The index to use for this file descriptor that represents this
@@ -141,7 +153,10 @@ event (in both user and kernel space). User programs should use a separate file
141153
to request deletes than the one used for registration due to this.
142154

143155
**NOTE:** By default events will auto-delete when there are no references left
144-
to the event. Flags in the future may change this logic.
156+
to the event. If programs do not want auto-delete, they must use the
157+
USER_EVENT_REG_PERSIST flag when registering the event. Once that flag is used
158+
the event exists until DIAG_IOCSDEL is invoked. Both register and delete of an
159+
event that persists requires CAP_PERFMON, otherwise -EPERM is returned.
145160

146161
Unregistering
147162
-------------

arch/powerpc/kernel/setup-common.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,6 @@ struct seq_buf ppc_hw_desc __initdata = {
601601
.buffer = ppc_hw_desc_buf,
602602
.size = sizeof(ppc_hw_desc_buf),
603603
.len = 0,
604-
.readpos = 0,
605604
};
606605

607606
static __init void probe_machine(void)

0 commit comments

Comments
 (0)