perf evlist: Split perf_evlist__id_hash
Commit-ID: 3d3b5e95997208067c963923db90ed1517565d14 Gitweb: http://git.kernel.org/tip/3d3b5e95997208067c963923db90ed1517565d14 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 4 Mar 2011 22:29:39 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Sun, 6 Mar 2011 13:10:45 -0300
perf evlist: Split perf_evlist__id_hash
The previous situation was to receive an fd from where to read the event ID.
Spin off a routine for when we have the ID handy, not having to read it from some fd.
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: Tom Zanussi <[email protected]>
LKML-Reference: <new-submission>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evlist.c | 28 ++++++++++++++++++---------- tools/perf/util/evlist.h | 3 +++ 2 files changed, 21 insertions(+), 10 deletions(-)
tools/perf/util/evlist.c +18 -10
@@ -106,12 +106,24 @@ void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd) evlist->nr_fds++; } -static int perf_evlist__id_hash (struct perf_evlist *evlist,struct perf_evsel *evsel, -int cpu,int thread,int fd) +void perf_evlist__id_hash (struct perf_evlist *evlist,struct perf_evsel *evsel, +int cpu,int thread,u64 id) +{ +int hash; +struct perf_sample_id *sid =SID (evsel, cpu, thread); + + sid->id = id; + sid->evsel = evsel; + hash =hash_64 (sid->id,PERF_EVLIST__HLIST_BITS ); +hlist_add_head (&sid->node, &evlist->heads[hash]); +} + +static int perf_evlist__id_hash_fd (struct perf_evlist *evlist, +struct perf_evsel *evsel, +int cpu,int thread,int fd) { -struct perf_sample_id *sid;u64 read_data[4 ] = {0 , }; -int hash, id_idx =1 ;/* The first entry is the counter value */ +int id_idx =1 ;/* The first entry is the counter value */ if (!(evsel->attr.read_format &PERF_FORMAT_ID ) ||read (fd, &read_data,sizeof (read_data)) ==-1 )
@@ -122,11 +134,7 @@ static int perf_evlist__id_hash(struct perf_evlist *evlist, struct perf_evsel *eif (evsel->attr.read_format &PERF_FORMAT_TOTAL_TIME_RUNNING ) ++id_idx; - sid =SID (evsel, cpu, thread); - sid->id = read_data[id_idx]; - sid->evsel = evsel; - hash =hash_64 (sid->id,PERF_EVLIST__HLIST_BITS ); -hlist_add_head (&sid->node, &evlist->heads[hash]); +perf_evlist__id_hash (evlist, evsel, cpu, thread, read_data[id_idx]);return 0 ; }
@@ -300,7 +308,7 @@ int perf_evlist__mmap(struct perf_evlist *evlist, int pages, bool overwrite) goto out_unmap;if ((evsel->attr.read_format &PERF_FORMAT_ID ) && -perf_evlist__id_hash (evlist, evsel, cpu, thread, fd) <0 ) +perf_evlist__id_hash_fd (evlist, evsel, cpu, thread, fd) <0 ) goto out_unmap; } }
tools/perf/util/evlist.h +3 -0
@@ -38,6 +38,9 @@ void perf_evlist__delete(struct perf_evlist *evlist);void perf_evlist__add (struct perf_evlist *evlist,struct perf_evsel *entry);int perf_evlist__add_default (struct perf_evlist *evlist); +void perf_evlist__id_hash (struct perf_evlist *evlist,struct perf_evsel *evsel, +int cpu,int thread,u64 id); +int perf_evlist__alloc_pollfd (struct perf_evlist *evlist);void perf_evlist__add_pollfd (struct perf_evlist *evlist,int fd);