diff options
Diffstat (limited to 'tools/perf/builtin-top.c')
| -rw-r--r-- | tools/perf/builtin-top.c | 23 | 
1 files changed, 17 insertions, 6 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 35e86c6df71..68cd61ef6ac 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -38,6 +38,7 @@  #include "util/cpumap.h"  #include "util/xyarray.h"  #include "util/sort.h" +#include "util/intlist.h"  #include "util/debug.h" @@ -706,8 +707,16 @@ static void perf_event__process_sample(struct perf_tool *tool,  	int err;  	if (!machine && perf_guest) { -		pr_err("Can't find guest [%d]'s kernel information\n", -			event->ip.pid); +		static struct intlist *seen; + +		if (!seen) +			seen = intlist__new(); + +		if (!intlist__has_entry(seen, event->ip.pid)) { +			pr_err("Can't find guest [%d]'s kernel information\n", +				event->ip.pid); +			intlist__add(seen, event->ip.pid); +		}  		return;  	} @@ -811,7 +820,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)  	int ret;  	while ((event = perf_evlist__mmap_read(top->evlist, idx)) != NULL) { -		ret = perf_session__parse_sample(session, event, &sample); +		ret = perf_evlist__parse_sample(top->evlist, event, &sample, false);  		if (ret) {  			pr_err("Can't parse sample, err = %d\n", ret);  			continue; @@ -943,8 +952,10 @@ try_again:  			 * based cpu-clock-tick sw counter, which  			 * is always available even if no PMU support:  			 */ -			if (attr->type == PERF_TYPE_HARDWARE && -			    attr->config == PERF_COUNT_HW_CPU_CYCLES) { +			if ((err == ENOENT || err == ENXIO) && +			    (attr->type == PERF_TYPE_HARDWARE) && +			    (attr->config == PERF_COUNT_HW_CPU_CYCLES)) { +  				if (verbose)  					ui__warning("Cycles event not supported,\n"  						    "trying to fall back to cpu-clock-ticks\n"); @@ -1032,7 +1043,7 @@ static int __cmd_top(struct perf_top *top)  					       &top->session->host_machine);  	perf_top__start_counters(top);  	top->session->evlist = top->evlist; -	perf_session__update_sample_type(top->session); +	perf_session__set_id_hdr_size(top->session);  	/* Wait for a minimal set of events before starting the snapshot */  	poll(top->evlist->pollfd, top->evlist->nr_fds, 100);  |