ftrace, perf: Add add/del tracepoint perf registration actions
Adding TRACE_REG_PERF_ADD and TRACE_REG_PERF_DEL to handle perf event schedule in/out actions. The add action is invoked for when the perf event is scheduled in, while the del action is invoked when the event is scheduled out. Link: http://lkml.kernel.org/r/1329317514-8131-4-git-send-email-jolsa@redhat.com Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Jiri Olsa <jolsa@redhat.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
		
					parent
					
						
							
								ceec0b6fc7
							
						
					
				
			
			
				commit
				
					
						489c75c3b3
					
				
			
		
					 5 changed files with 13 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -148,6 +148,8 @@ enum trace_reg {
 | 
			
		|||
	TRACE_REG_PERF_UNREGISTER,
 | 
			
		||||
	TRACE_REG_PERF_OPEN,
 | 
			
		||||
	TRACE_REG_PERF_CLOSE,
 | 
			
		||||
	TRACE_REG_PERF_ADD,
 | 
			
		||||
	TRACE_REG_PERF_DEL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ftrace_event_call;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,12 +211,14 @@ int perf_trace_add(struct perf_event *p_event, int flags)
 | 
			
		|||
	list = this_cpu_ptr(pcpu_list);
 | 
			
		||||
	hlist_add_head_rcu(&p_event->hlist_entry, list);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return tp_event->class->reg(tp_event, TRACE_REG_PERF_ADD, p_event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void perf_trace_del(struct perf_event *p_event, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct ftrace_event_call *tp_event = p_event->tp_event;
 | 
			
		||||
	hlist_del_rcu(&p_event->hlist_entry);
 | 
			
		||||
	tp_event->class->reg(tp_event, TRACE_REG_PERF_DEL, p_event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__kprobes void *perf_trace_buf_prepare(int size, unsigned short type,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -173,6 +173,8 @@ int ftrace_event_reg(struct ftrace_event_call *call,
 | 
			
		|||
		return 0;
 | 
			
		||||
	case TRACE_REG_PERF_OPEN:
 | 
			
		||||
	case TRACE_REG_PERF_CLOSE:
 | 
			
		||||
	case TRACE_REG_PERF_ADD:
 | 
			
		||||
	case TRACE_REG_PERF_DEL:
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1912,6 +1912,8 @@ int kprobe_register(struct ftrace_event_call *event,
 | 
			
		|||
		return 0;
 | 
			
		||||
	case TRACE_REG_PERF_OPEN:
 | 
			
		||||
	case TRACE_REG_PERF_CLOSE:
 | 
			
		||||
	case TRACE_REG_PERF_ADD:
 | 
			
		||||
	case TRACE_REG_PERF_DEL:
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -666,6 +666,8 @@ static int syscall_enter_register(struct ftrace_event_call *event,
 | 
			
		|||
		return 0;
 | 
			
		||||
	case TRACE_REG_PERF_OPEN:
 | 
			
		||||
	case TRACE_REG_PERF_CLOSE:
 | 
			
		||||
	case TRACE_REG_PERF_ADD:
 | 
			
		||||
	case TRACE_REG_PERF_DEL:
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -690,6 +692,8 @@ static int syscall_exit_register(struct ftrace_event_call *event,
 | 
			
		|||
		return 0;
 | 
			
		||||
	case TRACE_REG_PERF_OPEN:
 | 
			
		||||
	case TRACE_REG_PERF_CLOSE:
 | 
			
		||||
	case TRACE_REG_PERF_ADD:
 | 
			
		||||
	case TRACE_REG_PERF_DEL:
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue