diff options
Diffstat (limited to 'tools/perf/util/debug.c')
| -rw-r--r-- | tools/perf/util/debug.c | 56 | 
1 files changed, 50 insertions, 6 deletions
diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c index 299b55586502..71d419362634 100644 --- a/tools/perf/util/debug.c +++ b/tools/perf/util/debug.c @@ -16,11 +16,11 @@  int verbose;  bool dump_trace = false, quiet = false; -static int _eprintf(int level, const char *fmt, va_list args) +static int _eprintf(int level, int var, const char *fmt, va_list args)  {  	int ret = 0; -	if (verbose >= level) { +	if (var >= level) {  		if (use_browser >= 1)  			ui_helpline__vshow(fmt, args);  		else @@ -30,13 +30,13 @@ static int _eprintf(int level, const char *fmt, va_list args)  	return ret;  } -int eprintf(int level, const char *fmt, ...) +int eprintf(int level, int var, const char *fmt, ...)  {  	va_list args;  	int ret;  	va_start(args, fmt); -	ret = _eprintf(level, fmt, args); +	ret = _eprintf(level, var, fmt, args);  	va_end(args);  	return ret; @@ -51,9 +51,9 @@ void pr_stat(const char *fmt, ...)  	va_list args;  	va_start(args, fmt); -	_eprintf(1, fmt, args); +	_eprintf(1, verbose, fmt, args);  	va_end(args); -	eprintf(1, "\n"); +	eprintf(1, verbose, "\n");  }  int dump_printf(const char *fmt, ...) @@ -105,3 +105,47 @@ void trace_event(union perf_event *event)  	}  	printf(".\n");  } + +static struct debug_variable { +	const char *name; +	int *ptr; +} debug_variables[] = { +	{ .name = "verbose", .ptr = &verbose }, +	{ .name = NULL, } +}; + +int perf_debug_option(const char *str) +{ +	struct debug_variable *var = &debug_variables[0]; +	char *vstr, *s = strdup(str); +	int v = 1; + +	vstr = strchr(s, '='); +	if (vstr) +		*vstr++ = 0; + +	while (var->name) { +		if (!strcmp(s, var->name)) +			break; +		var++; +	} + +	if (!var->name) { +		pr_err("Unknown debug variable name '%s'\n", s); +		free(s); +		return -1; +	} + +	if (vstr) { +		v = atoi(vstr); +		/* +		 * Allow only values in range (0, 10), +		 * otherwise set 0. +		 */ +		v = (v < 0) || (v > 10) ? 0 : v; +	} + +	*var->ptr = v; +	free(s); +	return 0; +}  | 
