lkml.org 
[lkml]   [2015]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v12 04/30] tracing: Add event record param to trigger_ops.func()
    Date
    Some triggers may need access to the trace event, so pass it in.  Also
    fix up the existing trigger funcs and their callers.

    Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
    Tested-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    ---
    include/linux/trace_events.h | 7 ++++---
    kernel/trace/trace.h | 6 ++++--
    kernel/trace/trace_events_trigger.c | 36 +++++++++++++++++++-----------------
    3 files changed, 27 insertions(+), 22 deletions(-)

    diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
    index 429fdfc..95e8fef 100644
    --- a/include/linux/trace_events.h
    +++ b/include/linux/trace_events.h
    @@ -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
    diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
    index 2aa03be..c8cf683 100644
    --- a/kernel/trace/trace.h
    +++ b/kernel/trace/trace.h
    @@ -1202,7 +1202,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()
    @@ -1227,7 +1228,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,
    diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
    index 6087052..c3abef6 100644
    --- a/kernel/trace/trace_events_trigger.c
    +++ b/kernel/trace/trace_events_trigger.c
    @@ -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);
    @@ -750,7 +752,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;
    @@ -759,7 +761,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;
    @@ -774,7 +776,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;
    @@ -783,7 +785,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;
    @@ -879,13 +881,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;
    @@ -893,7 +895,7 @@ snapshot_count_trigger(struct event_trigger_data *data)
    if (data->count != -1)
    (data->count)--;

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

    static int
    @@ -972,13 +974,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;
    @@ -986,7 +988,7 @@ stacktrace_count_trigger(struct event_trigger_data *data)
    if (data->count != -1)
    (data->count)--;

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

    static int
    @@ -1057,7 +1059,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;

    @@ -1068,7 +1070,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;

    @@ -1082,7 +1084,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
    --
    1.9.3


    \
     
     \ /
      Last update: 2015-11-23 21:41    [W:6.386 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site