tracing/probe: Split trace_event related data from trace_probe
Split the trace_event related data from trace_probe data structure and introduce trace_probe_event data structure for its folder. This trace_probe_event data structure can have multiple trace_probe. Link: http://lkml.kernel.org/r/156095683995.28024.7552150340561557873.stgit@devnote2 Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt (VMware)
parent
17e262e995
commit
60d53e2c3b
+37
-11
@@ -222,11 +222,18 @@ struct probe_arg {
|
||||
const struct fetch_type *type; /* Type of this argument */
|
||||
};
|
||||
|
||||
struct trace_probe {
|
||||
/* Event call and class holder */
|
||||
struct trace_probe_event {
|
||||
unsigned int flags; /* For TP_FLAG_* */
|
||||
struct trace_event_class class;
|
||||
struct trace_event_call call;
|
||||
struct list_head files;
|
||||
struct list_head probes;
|
||||
};
|
||||
|
||||
struct trace_probe {
|
||||
struct list_head list;
|
||||
struct trace_probe_event *event;
|
||||
ssize_t size; /* trace entry size */
|
||||
unsigned int nr_args;
|
||||
struct probe_arg args[];
|
||||
@@ -240,19 +247,19 @@ struct event_file_link {
|
||||
static inline bool trace_probe_test_flag(struct trace_probe *tp,
|
||||
unsigned int flag)
|
||||
{
|
||||
return !!(tp->flags & flag);
|
||||
return !!(tp->event->flags & flag);
|
||||
}
|
||||
|
||||
static inline void trace_probe_set_flag(struct trace_probe *tp,
|
||||
unsigned int flag)
|
||||
{
|
||||
tp->flags |= flag;
|
||||
tp->event->flags |= flag;
|
||||
}
|
||||
|
||||
static inline void trace_probe_clear_flag(struct trace_probe *tp,
|
||||
unsigned int flag)
|
||||
{
|
||||
tp->flags &= ~flag;
|
||||
tp->event->flags &= ~flag;
|
||||
}
|
||||
|
||||
static inline bool trace_probe_is_enabled(struct trace_probe *tp)
|
||||
@@ -262,29 +269,48 @@ static inline bool trace_probe_is_enabled(struct trace_probe *tp)
|
||||
|
||||
static inline const char *trace_probe_name(struct trace_probe *tp)
|
||||
{
|
||||
return trace_event_name(&tp->call);
|
||||
return trace_event_name(&tp->event->call);
|
||||
}
|
||||
|
||||
static inline const char *trace_probe_group_name(struct trace_probe *tp)
|
||||
{
|
||||
return tp->call.class->system;
|
||||
return tp->event->call.class->system;
|
||||
}
|
||||
|
||||
static inline struct trace_event_call *
|
||||
trace_probe_event_call(struct trace_probe *tp)
|
||||
{
|
||||
return &tp->call;
|
||||
return &tp->event->call;
|
||||
}
|
||||
|
||||
static inline struct trace_probe_event *
|
||||
trace_probe_event_from_call(struct trace_event_call *event_call)
|
||||
{
|
||||
return container_of(event_call, struct trace_probe_event, call);
|
||||
}
|
||||
|
||||
static inline struct trace_probe *
|
||||
trace_probe_primary_from_call(struct trace_event_call *call)
|
||||
{
|
||||
struct trace_probe_event *tpe = trace_probe_event_from_call(call);
|
||||
|
||||
return list_first_entry(&tpe->probes, struct trace_probe, list);
|
||||
}
|
||||
|
||||
static inline struct list_head *trace_probe_probe_list(struct trace_probe *tp)
|
||||
{
|
||||
return &tp->event->probes;
|
||||
}
|
||||
|
||||
static inline int trace_probe_unregister_event_call(struct trace_probe *tp)
|
||||
{
|
||||
/* tp->event is unregistered in trace_remove_event_call() */
|
||||
return trace_remove_event_call(&tp->call);
|
||||
return trace_remove_event_call(&tp->event->call);
|
||||
}
|
||||
|
||||
static inline bool trace_probe_has_single_file(struct trace_probe *tp)
|
||||
{
|
||||
return !!list_is_singular(&tp->files);
|
||||
return !!list_is_singular(&tp->event->files);
|
||||
}
|
||||
|
||||
int trace_probe_init(struct trace_probe *tp, const char *event,
|
||||
@@ -298,9 +324,9 @@ struct event_file_link *trace_probe_get_file_link(struct trace_probe *tp,
|
||||
struct trace_event_file *file);
|
||||
|
||||
#define trace_probe_for_each_link(pos, tp) \
|
||||
list_for_each_entry(pos, &(tp)->files, list)
|
||||
list_for_each_entry(pos, &(tp)->event->files, list)
|
||||
#define trace_probe_for_each_link_rcu(pos, tp) \
|
||||
list_for_each_entry_rcu(pos, &(tp)->files, list)
|
||||
list_for_each_entry_rcu(pos, &(tp)->event->files, list)
|
||||
|
||||
/* Check the name is good for event/group/fields */
|
||||
static inline bool is_good_name(const char *name)
|
||||
|
||||
Reference in New Issue
Block a user