perf tools: Reconstruct sw event with modifiers from perf_event_attr
[root@sandy ~]# perf record -e task-clock:u -a usleep 1 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.482 MB perf.data (~21073 samples) ] [root@sandy ~]# Before: [root@sandy ~]# perf evlist task-clock [root@sandy ~]# After: [root@sandy ~]# perf evlist task-clock:u [root@sandy ~]# Ditto for other tools. 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-97ltkmj7v23kyhflltf6iz5n@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									0b668bc9a7
								
							
						
					
					
						commit
						335c2f5d25
					
				| @ -128,6 +128,31 @@ static int perf_evsel__hw_name(struct perf_evsel *evsel, char *bf, size_t size) | ||||
| 	return r + perf_evsel__add_modifiers(evsel, bf + r, size - r); | ||||
| } | ||||
| 
 | ||||
| static const char *perf_evsel__sw_names[PERF_COUNT_SW_MAX] = { | ||||
| 	"cpu-clock", | ||||
| 	"task-clock", | ||||
| 	"page-faults", | ||||
| 	"context-switches", | ||||
| 	"CPU-migrations", | ||||
| 	"minor-faults", | ||||
| 	"major-faults", | ||||
| 	"alignment-faults", | ||||
| 	"emulation-faults", | ||||
| }; | ||||
| 
 | ||||
| const char *__perf_evsel__sw_name(u64 config) | ||||
| { | ||||
| 	if (config < PERF_COUNT_SW_MAX && perf_evsel__sw_names[config]) | ||||
| 		return perf_evsel__sw_names[config]; | ||||
| 	return "unknown-software"; | ||||
| } | ||||
| 
 | ||||
| static int perf_evsel__sw_name(struct perf_evsel *evsel, char *bf, size_t size) | ||||
| { | ||||
| 	int r = scnprintf(bf, size, "%s", __perf_evsel__sw_name(evsel->attr.config)); | ||||
| 	return r + perf_evsel__add_modifiers(evsel, bf + r, size - r); | ||||
| } | ||||
| 
 | ||||
| const char *perf_evsel__hw_cache[PERF_COUNT_HW_CACHE_MAX] | ||||
| 				[PERF_EVSEL__MAX_ALIASES] = { | ||||
|  { "L1-dcache",	"l1-d",		"l1d",		"L1-data",		}, | ||||
| @ -244,6 +269,10 @@ int perf_evsel__name(struct perf_evsel *evsel, char *bf, size_t size) | ||||
| 		ret = perf_evsel__hw_cache_name(evsel, bf, size); | ||||
| 		break; | ||||
| 
 | ||||
| 	case PERF_TYPE_SOFTWARE: | ||||
| 		ret = perf_evsel__sw_name(evsel, bf, size); | ||||
| 		break; | ||||
| 
 | ||||
| 	default: | ||||
| 		/*
 | ||||
| 		 * FIXME | ||||
|  | ||||
| @ -98,6 +98,8 @@ int __perf_evsel__hw_cache_type_op_res_name(u8 type, u8 op, u8 result, | ||||
| int __perf_evsel__hw_cache_name(u64 config, char *bf, size_t size); | ||||
| 
 | ||||
| const char *__perf_evsel__hw_name(u64 config); | ||||
| const char *__perf_evsel__sw_name(u64 config); | ||||
| 
 | ||||
| int perf_evsel__name(struct perf_evsel *evsel, char *bf, size_t size); | ||||
| 
 | ||||
| int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | ||||
|  | ||||
| @ -62,18 +62,6 @@ static struct event_symbol event_symbols[] = { | ||||
| #define PERF_EVENT_TYPE(config)		__PERF_EVENT_FIELD(config, TYPE) | ||||
| #define PERF_EVENT_ID(config)		__PERF_EVENT_FIELD(config, EVENT) | ||||
| 
 | ||||
| static const char *sw_event_names[PERF_COUNT_SW_MAX] = { | ||||
| 	"cpu-clock", | ||||
| 	"task-clock", | ||||
| 	"page-faults", | ||||
| 	"context-switches", | ||||
| 	"CPU-migrations", | ||||
| 	"minor-faults", | ||||
| 	"major-faults", | ||||
| 	"alignment-faults", | ||||
| 	"emulation-faults", | ||||
| }; | ||||
| 
 | ||||
| #define for_each_subsystem(sys_dir, sys_dirent, sys_next)	       \ | ||||
| 	while (!readdir_r(sys_dir, &sys_dirent, &sys_next) && sys_next)	       \ | ||||
| 	if (sys_dirent.d_type == DT_DIR &&				       \ | ||||
| @ -218,7 +206,8 @@ const char *event_name(struct perf_evsel *evsel) | ||||
| 	u64 config = evsel->attr.config; | ||||
| 	int type = evsel->attr.type; | ||||
| 
 | ||||
| 	if (type == PERF_TYPE_RAW || type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) { | ||||
| 	if (type == PERF_TYPE_RAW || type == PERF_TYPE_HARDWARE || | ||||
| 	    type == PERF_TYPE_SOFTWARE || type == PERF_TYPE_HW_CACHE) { | ||||
| 		/*
 | ||||
|  		 * XXX minimal fix, see comment on perf_evsen__name, this static buffer | ||||
|  		 * will go away together with event_name in the next devel cycle. | ||||
| @ -252,9 +241,7 @@ const char *__event_name(int type, u64 config) | ||||
| 		return buf; | ||||
| 
 | ||||
| 	case PERF_TYPE_SOFTWARE: | ||||
| 		if (config < PERF_COUNT_SW_MAX && sw_event_names[config]) | ||||
| 			return sw_event_names[config]; | ||||
| 		return "unknown-software"; | ||||
| 		return __perf_evsel__sw_name(config); | ||||
| 
 | ||||
| 	case PERF_TYPE_TRACEPOINT: | ||||
| 		return tracepoint_id_to_name(config); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user