mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	tracing: expand the ring buffers when an event is activated
To save memory, the tracer ring buffers are set to a minimum. The activating of a trace expands the ring buffer size. This patch adds this expanding, when an event is activated. Signed-off-by: Steven Rostedt <srostedt@redhat.com>
This commit is contained in:
		
							parent
							
								
									73c5162aa3
								
							
						
					
					
						commit
						1852fcce18
					
				
					 3 changed files with 31 additions and 0 deletions
				
			
		|  | @ -2357,6 +2357,26 @@ static int tracing_resize_ring_buffer(unsigned long size) | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * tracing_update_buffers - used by tracing facility to expand ring buffers | ||||
|  * | ||||
|  * To save on memory when the tracing is never used on a system with it | ||||
|  * configured in. The ring buffers are set to a minimum size. But once | ||||
|  * a user starts to use the tracing facility, then they need to grow | ||||
|  * to their default size. | ||||
|  * | ||||
|  * This function is to be called when a tracer is about to be used. | ||||
|  */ | ||||
| int tracing_update_buffers(void) | ||||
| { | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	if (!ring_buffer_expanded) | ||||
| 		ret = tracing_resize_ring_buffer(trace_buf_size); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| struct trace_option_dentry; | ||||
| 
 | ||||
| static struct trace_option_dentry * | ||||
|  |  | |||
|  | @ -737,6 +737,9 @@ static inline void trace_branch_disable(void) | |||
| } | ||||
| #endif /* CONFIG_BRANCH_TRACER */ | ||||
| 
 | ||||
| /* set ring buffers to default size if not already done so */ | ||||
| int tracing_update_buffers(void); | ||||
| 
 | ||||
| /* trace event type bit fields, not numeric */ | ||||
| enum { | ||||
| 	TRACE_EVENT_TYPE_PRINTF		= 1, | ||||
|  |  | |||
|  | @ -141,6 +141,10 @@ ftrace_event_write(struct file *file, const char __user *ubuf, | |||
| 	if (!cnt || cnt < 0) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	ret = tracing_update_buffers(); | ||||
| 	if (ret < 0) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	ret = get_user(ch, ubuf++); | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
|  | @ -331,6 +335,10 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt, | |||
| 	if (ret < 0) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	ret = tracing_update_buffers(); | ||||
| 	if (ret < 0) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	switch (val) { | ||||
| 	case 0: | ||||
| 	case 1: | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Steven Rostedt
						Steven Rostedt