diff options
Diffstat (limited to 'tools/perf/util/machine.c')
| -rw-r--r-- | tools/perf/util/machine.c | 69 | 
1 files changed, 34 insertions, 35 deletions
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 83b2fbbeeb90..70a9f8716a4b 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -3,17 +3,26 @@  #include <errno.h>  #include <inttypes.h>  #include <regex.h> +#include <stdlib.h>  #include "callchain.h"  #include "debug.h" +#include "dso.h" +#include "env.h"  #include "event.h"  #include "evsel.h"  #include "hist.h"  #include "machine.h"  #include "map.h" +#include "map_symbol.h" +#include "branch.h" +#include "mem-events.h" +#include "srcline.h"  #include "symbol.h"  #include "sort.h"  #include "strlist.h" +#include "target.h"  #include "thread.h" +#include "util.h"  #include "vdso.h"  #include <stdbool.h>  #include <sys/types.h> @@ -23,10 +32,12 @@  #include "linux/hash.h"  #include "asm/bug.h"  #include "bpf-event.h" +#include <internal/lib.h> // page_size  #include <linux/ctype.h>  #include <symbol/kallsyms.h>  #include <linux/mman.h> +#include <linux/string.h>  #include <linux/zalloc.h>  static void __machine__remove_thread(struct machine *machine, struct thread *th, bool lock); @@ -642,7 +653,7 @@ int machine__process_namespaces_event(struct machine *machine __maybe_unused,  int machine__process_lost_event(struct machine *machine __maybe_unused,  				union perf_event *event, struct perf_sample *sample __maybe_unused)  { -	dump_printf(": id:%" PRIu64 ": lost:%" PRIu64 "\n", +	dump_printf(": id:%" PRI_lu64 ": lost:%" PRI_lu64 "\n",  		    event->lost.id, event->lost.lost);  	return 0;  } @@ -650,7 +661,7 @@ int machine__process_lost_event(struct machine *machine __maybe_unused,  int machine__process_lost_samples_event(struct machine *machine __maybe_unused,  					union perf_event *event, struct perf_sample *sample)  { -	dump_printf(": id:%" PRIu64 ": lost samples :%" PRIu64 "\n", +	dump_printf(": id:%" PRIu64 ": lost samples :%" PRI_lu64 "\n",  		    sample->id, event->lost_samples.lost);  	return 0;  } @@ -710,20 +721,20 @@ static int machine__process_ksymbol_register(struct machine *machine,  	struct symbol *sym;  	struct map *map; -	map = map_groups__find(&machine->kmaps, event->ksymbol_event.addr); +	map = map_groups__find(&machine->kmaps, event->ksymbol.addr);  	if (!map) { -		map = dso__new_map(event->ksymbol_event.name); +		map = dso__new_map(event->ksymbol.name);  		if (!map)  			return -ENOMEM; -		map->start = event->ksymbol_event.addr; -		map->end = map->start + event->ksymbol_event.len; +		map->start = event->ksymbol.addr; +		map->end = map->start + event->ksymbol.len;  		map_groups__insert(&machine->kmaps, map);  	}  	sym = symbol__new(map->map_ip(map, map->start), -			  event->ksymbol_event.len, -			  0, 0, event->ksymbol_event.name); +			  event->ksymbol.len, +			  0, 0, event->ksymbol.name);  	if (!sym)  		return -ENOMEM;  	dso__insert_symbol(map->dso, sym); @@ -736,7 +747,7 @@ static int machine__process_ksymbol_unregister(struct machine *machine,  {  	struct map *map; -	map = map_groups__find(&machine->kmaps, event->ksymbol_event.addr); +	map = map_groups__find(&machine->kmaps, event->ksymbol.addr);  	if (map)  		map_groups__remove(&machine->kmaps, map); @@ -750,7 +761,7 @@ int machine__process_ksymbol(struct machine *machine __maybe_unused,  	if (dump_trace)  		perf_event__fprintf_ksymbol(event, stdout); -	if (event->ksymbol_event.flags & PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER) +	if (event->ksymbol.flags & PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER)  		return machine__process_ksymbol_unregister(machine, event,  							   sample);  	return machine__process_ksymbol_register(machine, event, sample); @@ -1919,7 +1930,7 @@ int machine__process_event(struct machine *machine, union perf_event *event,  	case PERF_RECORD_KSYMBOL:  		ret = machine__process_ksymbol(machine, event, sample); break;  	case PERF_RECORD_BPF_EVENT: -		ret = machine__process_bpf_event(machine, event, sample); break; +		ret = machine__process_bpf(machine, event, sample); break;  	default:  		ret = -1;  		break; @@ -2288,7 +2299,7 @@ static int find_prev_cpumode(struct ip_callchain *chain, struct thread *thread,  static int thread__resolve_callchain_sample(struct thread *thread,  					    struct callchain_cursor *cursor, -					    struct perf_evsel *evsel, +					    struct evsel *evsel,  					    struct perf_sample *sample,  					    struct symbol **parent,  					    struct addr_location *root_al, @@ -2494,13 +2505,13 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)  static int thread__resolve_callchain_unwind(struct thread *thread,  					    struct callchain_cursor *cursor, -					    struct perf_evsel *evsel, +					    struct evsel *evsel,  					    struct perf_sample *sample,  					    int max_stack)  {  	/* Can we do dwarf post unwind? */ -	if (!((evsel->attr.sample_type & PERF_SAMPLE_REGS_USER) && -	      (evsel->attr.sample_type & PERF_SAMPLE_STACK_USER))) +	if (!((evsel->core.attr.sample_type & PERF_SAMPLE_REGS_USER) && +	      (evsel->core.attr.sample_type & PERF_SAMPLE_STACK_USER)))  		return 0;  	/* Bail out if nothing was captured. */ @@ -2514,7 +2525,7 @@ static int thread__resolve_callchain_unwind(struct thread *thread,  int thread__resolve_callchain(struct thread *thread,  			      struct callchain_cursor *cursor, -			      struct perf_evsel *evsel, +			      struct evsel *evsel,  			      struct perf_sample *sample,  			      struct symbol **parent,  			      struct addr_location *root_al, @@ -2599,24 +2610,11 @@ int machines__for_each_thread(struct machines *machines,  	return rc;  } -int __machine__synthesize_threads(struct machine *machine, struct perf_tool *tool, -				  struct target *target, struct thread_map *threads, -				  perf_event__handler_t process, bool data_mmap, -				  unsigned int nr_threads_synthesize) -{ -	if (target__has_task(target)) -		return perf_event__synthesize_thread_map(tool, threads, process, machine, data_mmap); -	else if (target__has_cpu(target)) -		return perf_event__synthesize_threads(tool, process, -						      machine, data_mmap, -						      nr_threads_synthesize); -	/* command specified */ -	return 0; -} -  pid_t machine__get_current_tid(struct machine *machine, int cpu)  { -	if (cpu < 0 || cpu >= MAX_NR_CPUS || !machine->current_tid) +	int nr_cpus = min(machine->env->nr_cpus_online, MAX_NR_CPUS); + +	if (cpu < 0 || cpu >= nr_cpus || !machine->current_tid)  		return -1;  	return machine->current_tid[cpu]; @@ -2626,6 +2624,7 @@ int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid,  			     pid_t tid)  {  	struct thread *thread; +	int nr_cpus = min(machine->env->nr_cpus_online, MAX_NR_CPUS);  	if (cpu < 0)  		return -EINVAL; @@ -2633,14 +2632,14 @@ int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid,  	if (!machine->current_tid) {  		int i; -		machine->current_tid = calloc(MAX_NR_CPUS, sizeof(pid_t)); +		machine->current_tid = calloc(nr_cpus, sizeof(pid_t));  		if (!machine->current_tid)  			return -ENOMEM; -		for (i = 0; i < MAX_NR_CPUS; i++) +		for (i = 0; i < nr_cpus; i++)  			machine->current_tid[i] = -1;  	} -	if (cpu >= MAX_NR_CPUS) { +	if (cpu >= nr_cpus) {  		pr_err("Requested CPU %d too large. ", cpu);  		pr_err("Consider raising MAX_NR_CPUS\n");  		return -EINVAL;  |