lkml.org 
[lkml]   [2017]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[for-next][PATCH 15/33] tracing: Have the snapshot trigger use the mapping helper functions
    From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

    As the data pointer for individual ips will soon be removed and no longer
    passed to the callback function probe handlers, convert the snapshot
    trigger counter over to the new ftrace_func_mapper helper functions.

    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    ---
    kernel/trace/trace.c | 52 ++++++++++++++++++++++++++++++++++++++++++++--------
    1 file changed, 44 insertions(+), 8 deletions(-)

    diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
    index 41e9a20f91f0..7febeb823c62 100644
    --- a/kernel/trace/trace.c
    +++ b/kernel/trace/trace.c
    @@ -6745,13 +6745,19 @@ static void
    ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip,
    struct ftrace_probe_ops *ops, void **data)
    {
    - unsigned long *count = (long *)data;
    + struct ftrace_func_mapper *mapper = ops->private_data;
    + long *count = NULL;

    - if (!*count)
    - return;
    + if (mapper)
    + count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
    +
    + if (count) {
    +
    + if (*count <= 0)
    + return;

    - if (*count != -1)
    (*count)--;
    + }

    tracing_snapshot();
    }
    @@ -6760,20 +6766,42 @@ static int
    ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
    struct ftrace_probe_ops *ops, void *data)
    {
    - long count = (long)data;
    + struct ftrace_func_mapper *mapper = ops->private_data;
    + long *count = NULL;

    seq_printf(m, "%ps:", (void *)ip);

    seq_puts(m, "snapshot");

    - if (count == -1)
    - seq_puts(m, ":unlimited\n");
    + if (mapper)
    + count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
    +
    + if (count)
    + seq_printf(m, ":count=%ld\n", *count);
    else
    - seq_printf(m, ":count=%ld\n", count);
    + seq_puts(m, ":unlimited\n");

    return 0;
    }

    +static int
    +ftrace_snapshot_init(struct ftrace_probe_ops *ops, unsigned long ip,
    + void **data)
    +{
    + struct ftrace_func_mapper *mapper = ops->private_data;
    +
    + return ftrace_func_mapper_add_ip(mapper, ip, *data);
    +}
    +
    +static void
    +ftrace_snapshot_free(struct ftrace_probe_ops *ops, unsigned long ip,
    + void **_data)
    +{
    + struct ftrace_func_mapper *mapper = ops->private_data;
    +
    + ftrace_func_mapper_remove_ip(mapper, ip);
    +}
    +
    static struct ftrace_probe_ops snapshot_probe_ops = {
    .func = ftrace_snapshot,
    .print = ftrace_snapshot_print,
    @@ -6782,6 +6810,8 @@ static struct ftrace_probe_ops snapshot_probe_ops = {
    static struct ftrace_probe_ops snapshot_count_probe_ops = {
    .func = ftrace_count_snapshot,
    .print = ftrace_snapshot_print,
    + .init = ftrace_snapshot_init,
    + .free = ftrace_snapshot_free,
    };

    static int
    @@ -6812,6 +6842,12 @@ ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
    if (!strlen(number))
    goto out_reg;

    + if (!ops->private_data) {
    + ops->private_data = allocate_ftrace_func_mapper();
    + if (!ops->private_data)
    + return -ENOMEM;
    + }
    +
    /*
    * We use the callback data field (which is a pointer)
    * as our counter.
    --
    2.10.2

    \
     
     \ /
      Last update: 2017-04-21 23:40    [W:4.219 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site