Skip to contentSkip to conversation

perf machine: Add pointer to sample's environment

tip:perf/core tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message Sep 15, 2015 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  4cde998d205894705b534878122631142a3eefe4
Gitweb:     http://git.kernel.org/tip/4cde998d205894705b534878122631142a3eefe4
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Wed, 9 Sep 2015 12:25:00 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 14 Sep 2015 12:50:29 -0300

perf machine: Add pointer to sample's environment

The 'struct machine' represents the machine where the samples were/are being collected, and we also have a 'struct perf_env' with extra details about such machine, that we were collecting at 'perf.data' creation time but we also needed when no perf.data file is being used, such as in 'perf top'.

So, get those structs closer together, as they provide a bigger picture of the sample's environment.

In 'perf session', when the file argument is NULL, we can assume that the tool is sampling the running machine, so point machine->env to the global put in place in previous patches, while set it to the perf_header.env one when reading from a file.

This paves the way for machine->env to be used in perf_event__preprocess_sample to populate addr_location.socket.

Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Kan Liang <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
---
 tools/perf/util/header.c  | 1 +
 tools/perf/util/machine.c | 1 +
 tools/perf/util/machine.h | 1 +
 tools/perf/util/session.c | 2 ++
 4 files changed, 5 insertions(+)
tools/perf/util/header.c +1 -0
index 46ec6c5..6d8fa54 100644
@@ -2564,6 +2564,7 @@ int perf_session__read_header(struct perf_session *session)
 		return -ENOMEM;
 
 	session->evlist->env = &header->env;
+	session->machines.host.env = &header->env;
 	if (perf_data_file__is_pipe(file))
 		return perf_header__read_pipe(session);
 
tools/perf/util/machine.c +1 -0
index 6309f7c..fd1efea 100644
@@ -35,6 +35,7 @@ int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
 	machine->last_match = NULL;
 
 	machine->vdso_info = NULL;
+	machine->env = NULL;
 
 	machine->pid = pid;
 
tools/perf/util/machine.h +1 -0
index ea5cb4a..9dfc428 100644
@@ -34,6 +34,7 @@ struct machine {
 	struct list_head  dead_threads;
 	struct thread	  *last_match;
 	struct vdso_info  *vdso_info;
+	struct perf_env   *env;
 	struct dsos	  dsos;
 	struct map_groups kmaps;
 	struct map	  *vmlinux_maps[MAP__NR_TYPES];
tools/perf/util/session.c +2 -0
index 728cb11..d1a43a3 100644
@@ -138,6 +138,8 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
 			perf_session__set_id_hdr_size(session);
 			perf_session__set_comm_exec(session);
 		}
+	} else  {
+		session->machines.host.env = &perf_env;
 	}
 
 	if (!file || perf_data_file__is_write(file)) {