tracing: Allow whitespace to surround hist trigger filter

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.

Link: http://lkml.kernel.org/r/1053090c3c308d4f431accdeb59dff4b511d4554.1516069914.git.tom.zanussi@linux.intel.com

Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
(cherry picked from commit ab257ec0f8eb50c58fafd50b1cb5352553f31ccf)
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: azrim <mirzaspc@gmail.com>
This commit is contained in:
Tom Zanussi 2018-01-15 20:52:02 -06:00 committed by azrim
parent 034deb7a72
commit 203b38c1b5
No known key found for this signature in database
GPG Key ID: 497F8FB059B45D1C

View File

@ -5165,7 +5165,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)
@ -5174,10 +5174,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))