mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	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
	
	 Peter Zijlstra
						Peter Zijlstra