perf evsel: Introduce perf_evsel__{in,ex}it
Commit-ID: ef1d1af28ca37fdbc2745da040529cd2953c1af5 Gitweb: http://git.kernel.org/tip/ef1d1af28ca37fdbc2745da040529cd2953c1af5 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 18 Jan 2011 21:41:45 -0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 24 Jan 2011 13:18:05 -0200
perf evsel: Introduce perf_evsel__{in,ex}it
Out of the {con,des}structor, as in interpreted language bindings we will need to go back from the wrapper object to the real thing. In that case using container_of will save us to have an extra pointer in the perf_evsel struct.
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 | 29 ++++++++++++++++++++--------- tools/perf/util/evlist.h | 2 ++ tools/perf/util/evsel.c | 22 ++++++++++++++++------ tools/perf/util/evsel.h | 3 +++ 4 files changed, 41 insertions(+), 15 deletions(-)
tools/perf/util/evlist.c +20 -9
@@ -6,17 +6,21 @@#include <linux/bitops.h> #include <linux/hash.h> +void perf_evlist__init (struct perf_evlist *evlist) +{ +int i; + +for (i =0 ; i <PERF_EVLIST__HLIST_SIZE ; ++i) +INIT_HLIST_HEAD (&evlist->heads[i]); +INIT_LIST_HEAD (&evlist->entries); +} +struct perf_evlist *perf_evlist__new (void ) {struct perf_evlist *evlist =zalloc (sizeof (*evlist)); -if (evlist !=NULL ) { -int i; - -for (i =0 ; i <PERF_EVLIST__HLIST_SIZE ; ++i) -INIT_HLIST_HEAD (&evlist->heads[i]); -INIT_LIST_HEAD (&evlist->entries); - } +if (evlist !=NULL ) +perf_evlist__init (evlist);return evlist; }
@@ -33,11 +37,18 @@ static void perf_evlist__purge(struct perf_evlist *evlist) evlist->nr_entries =0 ; } -void perf_evlist__delete (struct perf_evlist *evlist) +void perf_evlist__exit (struct perf_evlist *evlist) { -perf_evlist__purge (evlist);free (evlist->mmap);free (evlist->pollfd); + evlist->mmap =NULL ; + evlist->pollfd =NULL ; +} + +void perf_evlist__delete (struct perf_evlist *evlist) +{ +perf_evlist__purge (evlist); +perf_evlist__exit (evlist);free (evlist); }
tools/perf/util/evlist.h +2 -0
@@ -24,6 +24,8 @@ struct perf_evlist {struct perf_evsel ;struct perf_evlist *perf_evlist__new (void ); +void perf_evlist__init (struct perf_evlist *evlist); +void perf_evlist__exit (struct perf_evlist *evlist);void perf_evlist__delete (struct perf_evlist *evlist);void perf_evlist__add (struct perf_evlist *evlist,struct perf_evsel *entry);
tools/perf/util/evsel.c +16 -6
@@ -14,15 +14,20 @@#define FD (e, x, y) (*(int *)xyarray__entry(e->fd, x, y))#define SID (e, x, y) xyarray__entry(e->id, x, y) +void perf_evsel__init (struct perf_evsel *evsel, +struct perf_event_attr *attr,int idx) +{ + evsel->idx = idx; + evsel->attr = *attr; +INIT_LIST_HEAD (&evsel->node); +} +struct perf_evsel *perf_evsel__new (struct perf_event_attr *attr,int idx) {struct perf_evsel *evsel =zalloc (sizeof (*evsel)); -if (evsel !=NULL ) { - evsel->idx = idx; - evsel->attr = *attr; -INIT_LIST_HEAD (&evsel->node); - } +if (evsel !=NULL ) +perf_evsel__init (evsel, attr, idx);return evsel; }
@@ -87,11 +92,16 @@ int perf_evlist__alloc_mmap(struct perf_evlist *evlist, int ncpus)return evlist->mmap !=NULL ?0 : -ENOMEM ; } -void perf_evsel__delete (struct perf_evsel *evsel) +void perf_evsel__exit (struct perf_evsel *evsel) {assert (list_empty (&evsel->node));xyarray__delete (evsel->fd);xyarray__delete (evsel->id); +} + +void perf_evsel__delete (struct perf_evsel *evsel) +{ +perf_evsel__exit (evsel);free (evsel); }
tools/perf/util/evsel.h +3 -0
@@ -52,6 +52,9 @@ struct thread_map;struct perf_evlist ;struct perf_evsel *perf_evsel__new (struct perf_event_attr *attr,int idx); +void perf_evsel__init (struct perf_evsel *evsel, +struct perf_event_attr *attr,int idx); +void perf_evsel__exit (struct perf_evsel *evsel);void perf_evsel__delete (struct perf_evsel *evsel);int perf_evsel__alloc_fd (struct perf_evsel *evsel,int ncpus,int nthreads);