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: Peter 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: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
44fc6ee923
commit
23725aeeab
1 changed files with 36 additions and 0 deletions
|
@ -412,6 +412,29 @@ event_format_read(struct file *filp, char __user *ubuf, size_t cnt,
|
||||||
return r;
|
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 = {
|
static const struct seq_operations show_event_seq_ops = {
|
||||||
.start = t_start,
|
.start = t_start,
|
||||||
.next = t_next,
|
.next = t_next,
|
||||||
|
@ -452,6 +475,11 @@ static const struct file_operations ftrace_event_format_fops = {
|
||||||
.read = event_format_read,
|
.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 *event_trace_events_dir(void)
|
||||||
{
|
{
|
||||||
static struct dentry *d_tracer;
|
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);
|
"'%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 */
|
/* A trace may not want to export its format */
|
||||||
if (!call->show_format)
|
if (!call->show_format)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue