diff options
Diffstat (limited to 'tools/perf/util/map.c')
| -rw-r--r-- | tools/perf/util/map.c | 41 | 
1 files changed, 39 insertions, 2 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index a1f4e366914..cc33486ad9e 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c @@ -7,6 +7,8 @@  #include <stdio.h>  #include <unistd.h>  #include "map.h" +#include "thread.h" +#include "strlist.h"  const char *map_type__name[MAP__NR_TYPES] = {  	[MAP__FUNCTION] = "Functions", @@ -585,7 +587,21 @@ int machine__init(struct machine *self, const char *root_dir, pid_t pid)  	self->kmaps.machine = self;  	self->pid	    = pid;  	self->root_dir      = strdup(root_dir); -	return self->root_dir == NULL ? -ENOMEM : 0; +	if (self->root_dir == NULL) +		return -ENOMEM; + +	if (pid != HOST_KERNEL_ID) { +		struct thread *thread = machine__findnew_thread(self, pid); +		char comm[64]; + +		if (thread == NULL) +			return -ENOMEM; + +		snprintf(comm, sizeof(comm), "[guest/%d]", pid); +		thread__set_comm(thread, comm); +	} + +	return 0;  }  static void dsos__delete(struct list_head *self) @@ -680,7 +696,15 @@ struct machine *machines__findnew(struct rb_root *self, pid_t pid)  	    (symbol_conf.guestmount)) {  		sprintf(path, "%s/%d", symbol_conf.guestmount, pid);  		if (access(path, R_OK)) { -			pr_err("Can't access file %s\n", path); +			static struct strlist *seen; + +			if (!seen) +				seen = strlist__new(true, NULL); + +			if (!strlist__has_entry(seen, path)) { +				pr_err("Can't access file %s\n", path); +				strlist__add(seen, path); +			}  			machine = NULL;  			goto out;  		} @@ -714,3 +738,16 @@ char *machine__mmap_name(struct machine *self, char *bf, size_t size)  	return bf;  } + +void machines__set_id_hdr_size(struct rb_root *machines, u16 id_hdr_size) +{ +	struct rb_node *node; +	struct machine *machine; + +	for (node = rb_first(machines); node; node = rb_next(node)) { +		machine = rb_entry(node, struct machine, rb_node); +		machine->id_hdr_size = id_hdr_size; +	} + +	return; +}  |