lkml.org 
[lkml]   [2019]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 16/21] tracing/uprobe: Add per-probe delete from event
    Date
    Add per-probe delete method from one event passing the head of
    definition. In other words, the events which match the head
    N parameters are deleted.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    ---
    kernel/trace/trace_uprobe.c | 31 ++++++++++++++++++++++++++++++-
    1 file changed, 30 insertions(+), 1 deletion(-)

    diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
    index 1bd6c29cc0f3..d2e200729c23 100644
    --- a/kernel/trace/trace_uprobe.c
    +++ b/kernel/trace/trace_uprobe.c
    @@ -284,13 +284,42 @@ static bool trace_uprobe_is_busy(struct dyn_event *ev)
    return trace_probe_is_enabled(&tu->tp);
    }

    +static bool trace_uprobe_match_command_head(struct trace_uprobe *tu,
    + int argc, const char **argv)
    +{
    + char buf[MAX_ARGSTR_LEN + 1];
    + int len;
    +
    + if (!argc)
    + return true;
    +
    + len = strlen(tu->filename);
    + if (argv[0][len] != ':' || strncmp(tu->filename, argv[0], len))
    + return false;
    +
    + if (tu->ref_ctr_offset == 0)
    + snprintf(buf, sizeof(buf), "0x%0*lx",
    + (int)(sizeof(void *) * 2), tu->offset);
    + else
    + snprintf(buf, sizeof(buf), "0x%0*lx(0x%lx)",
    + (int)(sizeof(void *) * 2), tu->offset,
    + tu->ref_ctr_offset);
    + if (strcmp(buf, &argv[0][len + 1]))
    + return false;
    +
    + argc--; argv++;
    +
    + return trace_probe_match_command_args(&tu->tp, argc, argv);
    +}
    +
    static bool trace_uprobe_match(const char *system, const char *event,
    int argc, const char **argv, struct dyn_event *ev)
    {
    struct trace_uprobe *tu = to_trace_uprobe(ev);

    return strcmp(trace_probe_name(&tu->tp), event) == 0 &&
    - (!system || strcmp(trace_probe_group_name(&tu->tp), system) == 0);
    + (!system || strcmp(trace_probe_group_name(&tu->tp), system) == 0) &&
    + trace_uprobe_match_command_head(tu, argc, argv);
    }

    static nokprobe_inline struct trace_uprobe *
    \
     
     \ /
      Last update: 2019-05-31 17:20    [W:3.552 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site