perf evsel: Add iterator to iterate over events ordered by CPU
Add some common code that is needed to iterate over all events in CPU order. Used in followon patches Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Link: http://lore.kernel.org/lkml/20191121001522.180827-6-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
a2408a7036
commit
a8cbe40fe9
@@ -342,6 +342,38 @@ static int perf_evlist__nr_threads(struct evlist *evlist,
|
||||
return perf_thread_map__nr(evlist->core.threads);
|
||||
}
|
||||
|
||||
void evlist__cpu_iter_start(struct evlist *evlist)
|
||||
{
|
||||
struct evsel *pos;
|
||||
|
||||
/*
|
||||
* Reset the per evsel cpu_iter. This is needed because
|
||||
* each evsel's cpumap may have a different index space,
|
||||
* and some operations need the index to modify
|
||||
* the FD xyarray (e.g. open, close)
|
||||
*/
|
||||
evlist__for_each_entry(evlist, pos)
|
||||
pos->cpu_iter = 0;
|
||||
}
|
||||
|
||||
bool evsel__cpu_iter_skip_no_inc(struct evsel *ev, int cpu)
|
||||
{
|
||||
if (ev->cpu_iter >= ev->core.cpus->nr)
|
||||
return true;
|
||||
if (cpu >= 0 && ev->core.cpus->map[ev->cpu_iter] != cpu)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool evsel__cpu_iter_skip(struct evsel *ev, int cpu)
|
||||
{
|
||||
if (!evsel__cpu_iter_skip_no_inc(ev, cpu)) {
|
||||
ev->cpu_iter++;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void evlist__disable(struct evlist *evlist)
|
||||
{
|
||||
struct evsel *pos;
|
||||
|
Reference in New Issue
Block a user