lkml.org 
[lkml]   [2017]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 28/37] tracing: Allow whitespace to surround hist trigger filter
    Date
    The existing code only allows for one space before and after the 'if'
    specifying the filter for a hist trigger. Add code to make that more
    permissive as far as whitespace goes. Specifically, we want to allow
    spaces in the trigger itself now that we have additional syntax
    (onmatch/onmax) where spaces are more natural e.g. spaces after commas
    in param lists.

    Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
    ---
    kernel/trace/trace_events_hist.c | 37 ++++++++++++++++++++++++++++++++-----
    1 file changed, 32 insertions(+), 5 deletions(-)

    diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
    index 47cc086..13f653f 100644
    --- a/kernel/trace/trace_events_hist.c
    +++ b/kernel/trace/trace_events_hist.c
    @@ -5118,7 +5118,7 @@ static int event_hist_trigger_func(struct event_command *cmd_ops,
    struct synth_event *se;
    const char *se_name;
    bool remove = false;
    - char *trigger;
    + char *trigger, *p;
    int ret = 0;

    if (!param)
    @@ -5127,10 +5127,37 @@ static int event_hist_trigger_func(struct event_command *cmd_ops,
    if (glob[0] == '!')
    remove = true;

    - /* separate the trigger from the filter (k:v [if filter]) */
    - trigger = strsep(&param, " \t");
    - if (!trigger)
    - return -EINVAL;
    + /*
    + * separate the trigger from the filter (k:v [if filter])
    + * allowing for whitespace in the trigger
    + */
    + p = trigger = param;
    + do {
    + p = strstr(p, "if");
    + if (!p)
    + break;
    + if (p == param)
    + return -EINVAL;
    + if (*(p - 1) != ' ' && *(p - 1) != '\t') {
    + p++;
    + continue;
    + }
    + if (p >= param + strlen(param) - strlen("if") - 1)
    + return -EINVAL;
    + if (*(p + strlen("if")) != ' ' && *(p + strlen("if")) != '\t') {
    + p++;
    + continue;
    + }
    + break;
    + } while (p);
    +
    + if (!p)
    + param = NULL;
    + else {
    + *(p - 1) = '\0';
    + param = strstrip(p);
    + trigger = strstrip(trigger);
    + }

    attrs = parse_hist_trigger_attrs(trigger);
    if (IS_ERR(attrs))
    --
    1.9.3
    \
     
     \ /
      Last update: 2017-10-30 21:57    [W:7.525 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site