Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23725aee authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

ftrace: provide an id file for each event



Since not every event has a format file to read the id from,
expose it explicitly in a separate file.

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <20090319194233.372534033@chello.nl>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 44fc6ee9
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -412,6 +412,29 @@ event_format_read(struct file *filp, char __user *ubuf, size_t cnt,
	return r;
}

static ssize_t
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
{
	struct ftrace_event_call *call = filp->private_data;
	struct trace_seq *s;
	int r;

	if (*ppos)
		return 0;

	s = kmalloc(sizeof(*s), GFP_KERNEL);
	if (!s)
		return -ENOMEM;

	trace_seq_init(s);
	trace_seq_printf(s, "%d\n", call->id);

	r = simple_read_from_buffer(ubuf, cnt, ppos,
				    s->buffer, s->len);
	kfree(s);
	return r;
}

static const struct seq_operations show_event_seq_ops = {
	.start = t_start,
	.next = t_next,
@@ -452,6 +475,11 @@ static const struct file_operations ftrace_event_format_fops = {
	.read = event_format_read,
};

static const struct file_operations ftrace_event_id_fops = {
	.open = tracing_open_generic,
	.read = event_id_read,
};

static struct dentry *event_trace_events_dir(void)
{
	static struct dentry *d_tracer;
@@ -550,6 +578,14 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events)
				   "'%s/enable' entry\n", call->name);
	}

	if (call->id) {
		entry = debugfs_create_file("id", 0444, call->dir, call,
				&ftrace_event_id_fops);
		if (!entry)
			pr_warning("Could not create debugfs '%s/id' entry\n",
					call->name);
	}

	/* A trace may not want to export its format */
	if (!call->show_format)
		return 0;