Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec5ce098 authored by Tom Zanussi's avatar Tom Zanussi Committed by Steven Rostedt (VMware)
Browse files

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: default avatarTom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 50450603
Loading
Loading
Loading
Loading
+32 −5
Original line number Original line Diff line number Diff line
@@ -5162,7 +5162,7 @@ static int event_hist_trigger_func(struct event_command *cmd_ops,
	struct synth_event *se;
	struct synth_event *se;
	const char *se_name;
	const char *se_name;
	bool remove = false;
	bool remove = false;
	char *trigger;
	char *trigger, *p;
	int ret = 0;
	int ret = 0;


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


	/* separate the trigger from the filter (k:v [if filter]) */
	/*
	trigger = strsep(&param, " \t");
	 * separate the trigger from the filter (k:v [if filter])
	if (!trigger)
	 * 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;
			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);
	attrs = parse_hist_trigger_attrs(trigger);
	if (IS_ERR(attrs))
	if (IS_ERR(attrs))