diff options
Diffstat (limited to 'kernel/trace/trace_events.c')
| -rw-r--r-- | kernel/trace/trace_events.c | 36 | 
1 files changed, 36 insertions, 0 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index c88227b3b9db..7763db8fd0b3 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -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;  | 
