mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	tracing/stack_trace: Skip 4 instead of 3 when using ftrace_ops_list_func
When using ftrace_ops_list_func, we should skip 4 instead of 3,
to avoid ftrace_call+0x5/0xb appearing in the stack trace:
        Depth    Size   Location    (110 entries)
        -----    ----   --------
  0)     2956       0   update_curr+0xe/0x1e0
  1)     2956      68   ftrace_call+0x5/0xb
  2)     2888      92   enqueue_entity+0x53/0xe80
  3)     2796      80   enqueue_task_fair+0x47/0x7e0
  4)     2716      28   enqueue_task+0x45/0x70
  5)     2688      12   activate_task+0x22/0x30
Add a function using_ftrace_ops_list_func() to test for this while keeping
ftrace_ops_list_func to remain static.
Link: http://lkml.kernel.org/p/1398006644-5935-2-git-send-email-wangjiaxing@insigma.com.cn
Signed-off-by: Jiaxing Wang <wangjiaxing@insigma.com.cn>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
			
			
This commit is contained in:
		
							parent
							
								
									ad1438a076
								
							
						
					
					
						commit
						7eea4fce02
					
				
					 3 changed files with 12 additions and 2 deletions
				
			
		| 
						 | 
					@ -313,6 +313,11 @@ static void update_ftrace_function(void)
 | 
				
			||||||
	ftrace_trace_function = func;
 | 
						ftrace_trace_function = func;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int using_ftrace_ops_list_func(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ftrace_trace_function == ftrace_ops_list_func;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
 | 
					static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ops->next = *list;
 | 
						ops->next = *list;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -830,6 +830,7 @@ void ftrace_destroy_function_files(struct trace_array *tr);
 | 
				
			||||||
void ftrace_init_global_array_ops(struct trace_array *tr);
 | 
					void ftrace_init_global_array_ops(struct trace_array *tr);
 | 
				
			||||||
void ftrace_init_array_ops(struct trace_array *tr, ftrace_func_t func);
 | 
					void ftrace_init_array_ops(struct trace_array *tr, ftrace_func_t func);
 | 
				
			||||||
void ftrace_reset_array_ops(struct trace_array *tr);
 | 
					void ftrace_reset_array_ops(struct trace_array *tr);
 | 
				
			||||||
 | 
					int using_ftrace_ops_list_func(void);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static inline int ftrace_trace_task(struct task_struct *task)
 | 
					static inline int ftrace_trace_task(struct task_struct *task)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,6 +86,10 @@ check_stack(unsigned long ip, unsigned long *stack)
 | 
				
			||||||
	max_stack_size = this_size;
 | 
						max_stack_size = this_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	max_stack_trace.nr_entries = 0;
 | 
						max_stack_trace.nr_entries = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (using_ftrace_ops_list_func())
 | 
				
			||||||
 | 
							max_stack_trace.skip = 4;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
		max_stack_trace.skip = 3;
 | 
							max_stack_trace.skip = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	save_stack_trace(&max_stack_trace);
 | 
						save_stack_trace(&max_stack_trace);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue