perf record: Pass perf_record_opts to the callchain cmdline parsing callback
Its all it uses and makes the parsing callback suitable for use by 'perf top', which will happen in a followup patch. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-wb9eti78bk2jd7wpasro8hsz@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									c79a439338
								
							
						
					
					
						commit
						c5ff78c309
					
				| @ -868,11 +868,9 @@ static int get_stack_size(char *str, unsigned long *_size) | ||||
| } | ||||
| #endif /* LIBUNWIND_SUPPORT */ | ||||
| 
 | ||||
| static int | ||||
| parse_callchain_opt(const struct option *opt __maybe_unused, const char *arg, | ||||
| 		    int unset) | ||||
| static int parse_callchain_opt(const struct option *opt, const char *arg, int unset) | ||||
| { | ||||
| 	struct perf_record *rec = (struct perf_record *)opt->value; | ||||
| 	struct perf_record_opts *opts = opt->value; | ||||
| 	char *tok, *name, *saveptr = NULL; | ||||
| 	char *buf; | ||||
| 	int ret = -1; | ||||
| @ -898,7 +896,7 @@ parse_callchain_opt(const struct option *opt __maybe_unused, const char *arg, | ||||
| 		/* Framepointer style */ | ||||
| 		if (!strncmp(name, "fp", sizeof("fp"))) { | ||||
| 			if (!strtok_r(NULL, ",", &saveptr)) { | ||||
| 				rec->opts.call_graph = CALLCHAIN_FP; | ||||
| 				opts->call_graph = CALLCHAIN_FP; | ||||
| 				ret = 0; | ||||
| 			} else | ||||
| 				pr_err("callchain: No more arguments " | ||||
| @ -911,20 +909,20 @@ parse_callchain_opt(const struct option *opt __maybe_unused, const char *arg, | ||||
| 			const unsigned long default_stack_dump_size = 8192; | ||||
| 
 | ||||
| 			ret = 0; | ||||
| 			rec->opts.call_graph = CALLCHAIN_DWARF; | ||||
| 			rec->opts.stack_dump_size = default_stack_dump_size; | ||||
| 			opts->call_graph = CALLCHAIN_DWARF; | ||||
| 			opts->stack_dump_size = default_stack_dump_size; | ||||
| 
 | ||||
| 			tok = strtok_r(NULL, ",", &saveptr); | ||||
| 			if (tok) { | ||||
| 				unsigned long size = 0; | ||||
| 
 | ||||
| 				ret = get_stack_size(tok, &size); | ||||
| 				rec->opts.stack_dump_size = size; | ||||
| 				opts->stack_dump_size = size; | ||||
| 			} | ||||
| 
 | ||||
| 			if (!ret) | ||||
| 				pr_debug("callchain: stack dump size %d\n", | ||||
| 					 rec->opts.stack_dump_size); | ||||
| 					 opts->stack_dump_size); | ||||
| #endif /* LIBUNWIND_SUPPORT */ | ||||
| 		} else { | ||||
| 			pr_err("callchain: Unknown -g option " | ||||
| @ -937,7 +935,7 @@ parse_callchain_opt(const struct option *opt __maybe_unused, const char *arg, | ||||
| 	free(buf); | ||||
| 
 | ||||
| 	if (!ret) | ||||
| 		pr_debug("callchain: type %d\n", rec->opts.call_graph); | ||||
| 		pr_debug("callchain: type %d\n", opts->call_graph); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| @ -1021,9 +1019,9 @@ const struct option record_options[] = { | ||||
| 		     "number of mmap data pages"), | ||||
| 	OPT_BOOLEAN(0, "group", &record.opts.group, | ||||
| 		    "put the counters into a counter group"), | ||||
| 	OPT_CALLBACK_DEFAULT('g', "call-graph", &record, "mode[,dump_size]", | ||||
| 			     callchain_help, &parse_callchain_opt, | ||||
| 			     "fp"), | ||||
| 	OPT_CALLBACK_DEFAULT('g', "call-graph", &record.opts, | ||||
| 			     "mode[,dump_size]", callchain_help, | ||||
| 			     &parse_callchain_opt, "fp"), | ||||
| 	OPT_INCR('v', "verbose", &verbose, | ||||
| 		    "be more verbose (show counter open errors, etc)"), | ||||
| 	OPT_BOOLEAN('q', "quiet", &quiet, "don't print any message"), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user