Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4a59230 authored by Tom Zanussi's avatar Tom Zanussi Committed by Steven Rostedt
Browse files

tracing: Add event record param to trigger_ops.func()

Some triggers may need access to the trace event, so pass it in.  Also
fix up the existing trigger funcs and their callers.

Link: http://lkml.kernel.org/r/543e31e9fc445ef61077421ab219033401c39846.1449767187.git.tom.zanussi@linux.intel.com



Signed-off-by: default avatarTom Zanussi <tom.zanussi@linux.intel.com>
Tested-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Reviewed-by: default avatarNamhyung Kim <namhyung@kernel.org>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent ab4bf008
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -430,7 +430,8 @@ extern int call_filter_check_discard(struct trace_event_call *call, void *rec,
extern enum event_trigger_type event_triggers_call(struct trace_event_file *file,
						   void *rec);
extern void event_triggers_post_call(struct trace_event_file *file,
				     enum event_trigger_type tt);
				     enum event_trigger_type tt,
				     void *rec);

bool trace_event_ignore_this_pid(struct trace_event_file *trace_file);

@@ -517,7 +518,7 @@ event_trigger_unlock_commit(struct trace_event_file *file,
		trace_buffer_unlock_commit(file->tr, buffer, event, irq_flags, pc);

	if (tt)
		event_triggers_post_call(file, tt);
		event_triggers_post_call(file, tt, entry);
}

/**
@@ -550,7 +551,7 @@ event_trigger_unlock_commit_regs(struct trace_event_file *file,
						irq_flags, pc, regs);

	if (tt)
		event_triggers_post_call(file, tt);
		event_triggers_post_call(file, tt, entry);
}

#ifdef CONFIG_BPF_EVENTS
+4 −2
Original line number Diff line number Diff line
@@ -1201,7 +1201,8 @@ extern int register_event_command(struct event_command *cmd);
 * @func: The trigger 'probe' function called when the triggering
 *	event occurs.  The data passed into this callback is the data
 *	that was supplied to the event_command @reg() function that
 *	registered the trigger (see struct event_command).
 *	registered the trigger (see struct event_command) along with
 *	the trace record, rec.
 *
 * @init: An optional initialization function called for the trigger
 *	when the trigger is registered (via the event_command reg()
@@ -1226,7 +1227,8 @@ extern int register_event_command(struct event_command *cmd);
 *	(see trace_event_triggers.c).
 */
struct event_trigger_ops {
	void			(*func)(struct event_trigger_data *data);
	void			(*func)(struct event_trigger_data *data,
					void *rec);
	int			(*init)(struct event_trigger_ops *ops,
					struct event_trigger_data *data);
	void			(*free)(struct event_trigger_ops *ops,
+19 −17
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ event_triggers_call(struct trace_event_file *file, void *rec)

	list_for_each_entry_rcu(data, &file->triggers, list) {
		if (!rec) {
			data->ops->func(data);
			data->ops->func(data, rec);
			continue;
		}
		filter = rcu_dereference_sched(data->filter);
@@ -83,7 +83,7 @@ event_triggers_call(struct trace_event_file *file, void *rec)
			tt |= data->cmd_ops->trigger_type;
			continue;
		}
		data->ops->func(data);
		data->ops->func(data, rec);
	}
	return tt;
}
@@ -93,6 +93,7 @@ EXPORT_SYMBOL_GPL(event_triggers_call);
 * event_triggers_post_call - Call 'post_triggers' for a trace event
 * @file: The trace_event_file associated with the event
 * @tt: enum event_trigger_type containing a set bit for each trigger to invoke
 * @rec: The trace entry for the event
 *
 * For each trigger associated with an event, invoke the trigger
 * function registered with the associated trigger command, if the
@@ -103,13 +104,14 @@ EXPORT_SYMBOL_GPL(event_triggers_call);
 */
void
event_triggers_post_call(struct trace_event_file *file,
			 enum event_trigger_type tt)
			 enum event_trigger_type tt,
			 void *rec)
{
	struct event_trigger_data *data;

	list_for_each_entry_rcu(data, &file->triggers, list) {
		if (data->cmd_ops->trigger_type & tt)
			data->ops->func(data);
			data->ops->func(data, rec);
	}
}
EXPORT_SYMBOL_GPL(event_triggers_post_call);
@@ -745,7 +747,7 @@ int set_trigger_filter(char *filter_str,
}

static void
traceon_trigger(struct event_trigger_data *data)
traceon_trigger(struct event_trigger_data *data, void *rec)
{
	if (tracing_is_on())
		return;
@@ -754,7 +756,7 @@ traceon_trigger(struct event_trigger_data *data)
}

static void
traceon_count_trigger(struct event_trigger_data *data)
traceon_count_trigger(struct event_trigger_data *data, void *rec)
{
	if (tracing_is_on())
		return;
@@ -769,7 +771,7 @@ traceon_count_trigger(struct event_trigger_data *data)
}

static void
traceoff_trigger(struct event_trigger_data *data)
traceoff_trigger(struct event_trigger_data *data, void *rec)
{
	if (!tracing_is_on())
		return;
@@ -778,7 +780,7 @@ traceoff_trigger(struct event_trigger_data *data)
}

static void
traceoff_count_trigger(struct event_trigger_data *data)
traceoff_count_trigger(struct event_trigger_data *data, void *rec)
{
	if (!tracing_is_on())
		return;
@@ -874,13 +876,13 @@ static struct event_command trigger_traceoff_cmd = {

#ifdef CONFIG_TRACER_SNAPSHOT
static void
snapshot_trigger(struct event_trigger_data *data)
snapshot_trigger(struct event_trigger_data *data, void *rec)
{
	tracing_snapshot();
}

static void
snapshot_count_trigger(struct event_trigger_data *data)
snapshot_count_trigger(struct event_trigger_data *data, void *rec)
{
	if (!data->count)
		return;
@@ -888,7 +890,7 @@ snapshot_count_trigger(struct event_trigger_data *data)
	if (data->count != -1)
		(data->count)--;

	snapshot_trigger(data);
	snapshot_trigger(data, rec);
}

static int
@@ -967,13 +969,13 @@ static __init int register_trigger_snapshot_cmd(void) { return 0; }
#define STACK_SKIP 3

static void
stacktrace_trigger(struct event_trigger_data *data)
stacktrace_trigger(struct event_trigger_data *data, void *rec)
{
	trace_dump_stack(STACK_SKIP);
}

static void
stacktrace_count_trigger(struct event_trigger_data *data)
stacktrace_count_trigger(struct event_trigger_data *data, void *rec)
{
	if (!data->count)
		return;
@@ -981,7 +983,7 @@ stacktrace_count_trigger(struct event_trigger_data *data)
	if (data->count != -1)
		(data->count)--;

	stacktrace_trigger(data);
	stacktrace_trigger(data, rec);
}

static int
@@ -1052,7 +1054,7 @@ struct enable_trigger_data {
};

static void
event_enable_trigger(struct event_trigger_data *data)
event_enable_trigger(struct event_trigger_data *data, void *rec)
{
	struct enable_trigger_data *enable_data = data->private_data;

@@ -1063,7 +1065,7 @@ event_enable_trigger(struct event_trigger_data *data)
}

static void
event_enable_count_trigger(struct event_trigger_data *data)
event_enable_count_trigger(struct event_trigger_data *data, void *rec)
{
	struct enable_trigger_data *enable_data = data->private_data;

@@ -1077,7 +1079,7 @@ event_enable_count_trigger(struct event_trigger_data *data)
	if (data->count != -1)
		(data->count)--;

	event_enable_trigger(data);
	event_enable_trigger(data, rec);
}

static int