libperf: Move 'idx' from tools/perf to perf_evsel::idx
authorJiri Olsa <jolsa@redhat.com>
Tue, 6 Jul 2021 15:16:59 +0000 (17:16 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 9 Jul 2021 17:04:28 +0000 (14:04 -0300)
Move evsel::idx to perf_evsel::idx, so we can move the group interface
to libperf.

Committer notes:

Fixup evsel->idx usage in tools/perf/util/bpf_counter_cgroup.c, that
appeared in my tree in my local tree.

Also fixed up these:

$ find tools/perf/ -name "*.[ch]" | xargs grep 'evsel->idx'
tools/perf/ui/gtk/annotate.c:                      evsel->idx + i);
tools/perf/ui/gtk/annotate.c:                   evsel->idx);
$

That running 'make -C tools/perf build-test' caught.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Requested-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20210706151704.73662-3-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
21 files changed:
tools/lib/perf/evlist.c
tools/lib/perf/evsel.c
tools/lib/perf/include/internal/evsel.h
tools/perf/arch/x86/util/iostat.c
tools/perf/builtin-diff.c
tools/perf/builtin-report.c
tools/perf/builtin-top.c
tools/perf/tests/evsel-roundtrip-name.c
tools/perf/tests/mmap-basic.c
tools/perf/ui/browsers/annotate.c
tools/perf/ui/gtk/annotate.c
tools/perf/util/annotate.c
tools/perf/util/bpf_counter_cgroup.c
tools/perf/util/evlist.c
tools/perf/util/evsel.c
tools/perf/util/evsel.h
tools/perf/util/header.c
tools/perf/util/metricgroup.c
tools/perf/util/parse-events.c
tools/perf/util/python.c
tools/perf/util/stream.c

index a0aaf38..68b90bb 100644 (file)
@@ -66,6 +66,7 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 void perf_evlist__add(struct perf_evlist *evlist,
                      struct perf_evsel *evsel)
 {
+       evsel->idx = evlist->nr_entries;
        list_add_tail(&evsel->node, &evlist->entries);
        evlist->nr_entries += 1;
        __perf_evlist__propagate_maps(evlist, evsel);
index bd8c2f1..dccdc34 100644 (file)
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 
-void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr)
+void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,
+                     int idx)
 {
        INIT_LIST_HEAD(&evsel->node);
        evsel->attr = *attr;
+       evsel->idx  = idx;
 }
 
 struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr)
@@ -29,7 +31,7 @@ struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr)
        struct perf_evsel *evsel = zalloc(sizeof(*evsel));
 
        if (evsel != NULL)
-               perf_evsel__init(evsel, attr);
+               perf_evsel__init(evsel, attr, 0);
 
        return evsel;
 }
index 1c067d0..86f674e 100644 (file)
@@ -49,9 +49,11 @@ struct perf_evsel {
        /* parse modifier helper */
        int                      nr_members;
        bool                     system_wide;
+       int                      idx;
 };
 
-void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr);
+void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,
+                     int idx);
 int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads);
 void perf_evsel__close_fd(struct perf_evsel *evsel);
 void perf_evsel__free_fd(struct perf_evsel *evsel);
index d63acb7..eeafe97 100644 (file)
@@ -322,7 +322,7 @@ static int iostat_event_group(struct evlist *evl,
        }
 
        evlist__for_each_entry(evl, evsel) {
-               evsel->priv = list->rps[evsel->idx / metrics_count];
+               evsel->priv = list->rps[evsel->core.idx / metrics_count];
        }
        list->nr_entries = 0;
 err:
@@ -428,7 +428,7 @@ void iostat_print_metric(struct perf_stat_config *config, struct evsel *evsel,
 {
        double iostat_value = 0;
        u64 prev_count_val = 0;
-       const char *iostat_metric = iostat_metric_by_idx(evsel->idx);
+       const char *iostat_metric = iostat_metric_by_idx(evsel->core.idx);
        u8 die = ((struct iio_root_port *)evsel->priv)->die;
        struct perf_counts_values *count = perf_counts(evsel->counts, die, 0);
 
index f52b3a7..80450c0 100644 (file)
@@ -1031,12 +1031,12 @@ static int process_base_stream(struct data__file *data_base,
                        continue;
 
                es_base = evsel_streams__entry(data_base->evlist_streams,
-                                              evsel_base->idx);
+                                              evsel_base->core.idx);
                if (!es_base)
                        return -1;
 
                es_pair = evsel_streams__entry(data_pair->evlist_streams,
-                                              evsel_pair->idx);
+                                              evsel_pair->core.idx);
                if (!es_pair)
                        return -1;
 
index 8639bbe..3fdeea4 100644 (file)
@@ -332,7 +332,7 @@ static int process_read_event(struct perf_tool *tool,
                const char *name = evsel__name(evsel);
                int err = perf_read_values_add_value(&rep->show_threads_values,
                                           event->read.pid, event->read.tid,
-                                          evsel->idx,
+                                          evsel->core.idx,
                                           name,
                                           event->read.value);
 
@@ -666,7 +666,7 @@ static int report__collapse_hists(struct report *rep)
        evlist__for_each_entry(rep->session->evlist, pos) {
                struct hists *hists = evsel__hists(pos);
 
-               if (pos->idx == 0)
+               if (pos->core.idx == 0)
                        hists->symbol_filter_str = rep->symbol_filter_str;
 
                hists->socket_filter = rep->socket_filter;
index 2d570bf..76343a4 100644 (file)
@@ -264,9 +264,9 @@ static void perf_top__show_details(struct perf_top *top)
 
        if (top->evlist->enabled) {
                if (top->zero)
-                       symbol__annotate_zero_histogram(symbol, top->sym_evsel->idx);
+                       symbol__annotate_zero_histogram(symbol, top->sym_evsel->core.idx);
                else
-                       symbol__annotate_decay_histogram(symbol, top->sym_evsel->idx);
+                       symbol__annotate_decay_histogram(symbol, top->sym_evsel->core.idx);
        }
        if (more != 0)
                printf("%d lines not displayed, maybe increase display entries [e]\n", more);
@@ -530,7 +530,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
                                fprintf(stderr, "\nAvailable events:");
 
                                evlist__for_each_entry(top->evlist, top->sym_evsel)
-                                       fprintf(stderr, "\n\t%d %s", top->sym_evsel->idx, evsel__name(top->sym_evsel));
+                                       fprintf(stderr, "\n\t%d %s", top->sym_evsel->core.idx, evsel__name(top->sym_evsel));
 
                                prompt_integer(&counter, "Enter details event counter");
 
@@ -541,7 +541,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
                                        break;
                                }
                                evlist__for_each_entry(top->evlist, top->sym_evsel)
-                                       if (top->sym_evsel->idx == counter)
+                                       if (top->sym_evsel->core.idx == counter)
                                                break;
                        } else
                                top->sym_evsel = evlist__first(top->evlist);
index b74cf80..5ebf563 100644 (file)
@@ -44,7 +44,7 @@ static int perf_evsel__roundtrip_cache_name_test(void)
 
                        for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) {
                                __evsel__hw_cache_type_op_res_name(type, op, i, name, sizeof(name));
-                               if (evsel->idx != idx)
+                               if (evsel->core.idx != idx)
                                        continue;
 
                                ++idx;
@@ -84,9 +84,9 @@ static int __perf_evsel__name_array_test(const char *names[], int nr_names,
 
        err = 0;
        evlist__for_each_entry(evlist, evsel) {
-               if (strcmp(evsel__name(evsel), names[evsel->idx / distance])) {
+               if (strcmp(evsel__name(evsel), names[evsel->core.idx / distance])) {
                        --err;
-                       pr_debug("%s != %s\n", evsel__name(evsel), names[evsel->idx / distance]);
+                       pr_debug("%s != %s\n", evsel__name(evsel), names[evsel->core.idx / distance]);
                }
        }
 
index 73ae8f7..d38757d 100644 (file)
@@ -139,7 +139,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse
                                 " doesn't map to an evsel\n", sample.id);
                        goto out_delete_evlist;
                }
-               nr_events[evsel->idx]++;
+               nr_events[evsel->core.idx]++;
                perf_mmap__consume(&md->core);
        }
        perf_mmap__read_done(&md->core);
@@ -147,10 +147,10 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse
 out_init:
        err = 0;
        evlist__for_each_entry(evlist, evsel) {
-               if (nr_events[evsel->idx] != expected_nr_events[evsel->idx]) {
+               if (nr_events[evsel->core.idx] != expected_nr_events[evsel->core.idx]) {
                        pr_debug("expected %d %s events, got %d\n",
-                                expected_nr_events[evsel->idx],
-                                evsel__name(evsel), nr_events[evsel->idx]);
+                                expected_nr_events[evsel->core.idx],
+                                evsel__name(evsel), nr_events[evsel->core.idx]);
                        err = -1;
                        goto out_delete_evlist;
                }
index 5812a22..701130a 100644 (file)
@@ -749,7 +749,7 @@ static int annotate_browser__run(struct annotate_browser *browser,
                                hbt->timer(hbt->arg);
 
                        if (delay_secs != 0) {
-                               symbol__annotate_decay_histogram(sym, evsel->idx);
+                               symbol__annotate_decay_histogram(sym, evsel->core.idx);
                                hists__scnprintf_title(hists, title, sizeof(title));
                                annotate_browser__show(&browser->b, title, help);
                        }
index a7dff77..94167bf 100644 (file)
@@ -135,12 +135,12 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct map_symbol *ms,
                                ret += perf_gtk__get_percent(s + ret,
                                                             sizeof(s) - ret,
                                                             sym, pos,
-                                                            evsel->idx + i);
+                                                            evsel->core.idx + i);
                                ret += scnprintf(s + ret, sizeof(s) - ret, " ");
                        }
                } else {
                        ret = perf_gtk__get_percent(s, sizeof(s), sym, pos,
-                                                   evsel->idx);
+                                                   evsel->core.idx);
                }
 
                if (ret)
index abe1499..aa04a36 100644 (file)
@@ -961,7 +961,7 @@ static int symbol__inc_addr_samples(struct map_symbol *ms,
        if (sym == NULL)
                return 0;
        src = symbol__hists(sym, evsel->evlist->core.nr_entries);
-       return src ? __symbol__inc_addr_samples(ms, src, evsel->idx, addr, sample) : 0;
+       return src ? __symbol__inc_addr_samples(ms, src, evsel->core.idx, addr, sample) : 0;
 }
 
 static int symbol__account_cycles(u64 addr, u64 start,
@@ -2159,7 +2159,7 @@ static void annotation__calc_percent(struct annotation *notes,
 
                        BUG_ON(i >= al->data_nr);
 
-                       sym_hist = annotation__histogram(notes, evsel->idx);
+                       sym_hist = annotation__histogram(notes, evsel->core.idx);
                        data = &al->data[i++];
 
                        calc_percent(sym_hist, hists, data, al->offset, end);
@@ -2340,7 +2340,7 @@ static void print_summary(struct rb_root *root, const char *filename)
 static void symbol__annotate_hits(struct symbol *sym, struct evsel *evsel)
 {
        struct annotation *notes = symbol__annotation(sym);
-       struct sym_hist *h = annotation__histogram(notes, evsel->idx);
+       struct sym_hist *h = annotation__histogram(notes, evsel->core.idx);
        u64 len = symbol__size(sym), offset;
 
        for (offset = 0; offset < len; ++offset)
@@ -2373,7 +2373,7 @@ int symbol__annotate_printf(struct map_symbol *ms, struct evsel *evsel,
        const char *d_filename;
        const char *evsel_name = evsel__name(evsel);
        struct annotation *notes = symbol__annotation(sym);
-       struct sym_hist *h = annotation__histogram(notes, evsel->idx);
+       struct sym_hist *h = annotation__histogram(notes, evsel->core.idx);
        struct annotation_line *pos, *queue = NULL;
        u64 start = map__rip_2objdump(map, sym->start);
        int printed = 2, queue_len = 0, addr_fmt_width;
index 21261f1..89aa5e7 100644 (file)
@@ -124,7 +124,7 @@ static int bperf_load_program(struct evlist *evlist)
                        map_fd = bpf_map__fd(skel->maps.events);
                        for (cpu = 0; cpu < nr_cpus; cpu++) {
                                int fd = FD(evsel, cpu);
-                               __u32 idx = evsel->idx * total_cpus +
+                               __u32 idx = evsel->core.idx * total_cpus +
                                        evlist->core.all_cpus->map[cpu];
 
                                err = bpf_map_update_elem(map_fd, &idx, &fd,
@@ -221,7 +221,7 @@ static int bperf_cgrp__sync_counters(struct evlist *evlist)
 
 static int bperf_cgrp__enable(struct evsel *evsel)
 {
-       if (evsel->idx)
+       if (evsel->core.idx)
                return 0;
 
        bperf_cgrp__sync_counters(evsel->evlist);
@@ -232,7 +232,7 @@ static int bperf_cgrp__enable(struct evsel *evsel)
 
 static int bperf_cgrp__disable(struct evsel *evsel)
 {
-       if (evsel->idx)
+       if (evsel->core.idx)
                return 0;
 
        bperf_cgrp__sync_counters(evsel->evlist);
@@ -251,7 +251,7 @@ static int bperf_cgrp__read(struct evsel *evsel)
        int reading_map_fd, err = 0;
        __u32 idx;
 
-       if (evsel->idx)
+       if (evsel->core.idx)
                return 0;
 
        bperf_cgrp__sync_counters(evsel->evlist);
@@ -263,7 +263,7 @@ static int bperf_cgrp__read(struct evsel *evsel)
        reading_map_fd = bpf_map__fd(skel->maps.cgrp_readings);
 
        evlist__for_each_entry(evlist, evsel) {
-               idx = evsel->idx;
+               idx = evsel->core.idx;
                err = bpf_map_lookup_elem(reading_map_fd, &idx, values);
                if (err) {
                        pr_err("bpf map lookup falied: idx=%u, event=%s, cgrp=%s\n",
@@ -288,7 +288,7 @@ out:
 
 static int bperf_cgrp__destroy(struct evsel *evsel)
 {
-       if (evsel->idx)
+       if (evsel->core.idx)
                return 0;
 
        bperf_cgroup_bpf__destroy(skel);
index 6ba9664..6563ce3 100644 (file)
@@ -165,11 +165,9 @@ void evlist__delete(struct evlist *evlist)
 
 void evlist__add(struct evlist *evlist, struct evsel *entry)
 {
-       entry->evlist = evlist;
-       entry->idx = evlist->core.nr_entries;
-       entry->tracking = !entry->idx;
-
        perf_evlist__add(&evlist->core, &entry->core);
+       entry->evlist = evlist;
+       entry->tracking = !entry->core.idx;
 
        if (evlist->core.nr_entries == 1)
                evlist__set_id_pos(evlist);
@@ -232,7 +230,7 @@ void __evlist__set_leader(struct list_head *list)
        leader = list_entry(list->next, struct evsel, core.node);
        evsel = list_entry(list->prev, struct evsel, core.node);
 
-       leader->core.nr_members = evsel->idx - leader->idx + 1;
+       leader->core.nr_members = evsel->core.idx - leader->core.idx + 1;
 
        __evlist__for_each_entry(list, evsel) {
                evsel->leader = leader;
@@ -2137,7 +2135,7 @@ struct evsel *evlist__find_evsel(struct evlist *evlist, int idx)
        struct evsel *evsel;
 
        evlist__for_each_entry(evlist, evsel) {
-               if (evsel->idx == idx)
+               if (evsel->core.idx == idx)
                        return evsel;
        }
        return NULL;
index b1c930e..cce1681 100644 (file)
@@ -239,8 +239,7 @@ bool evsel__is_function_event(struct evsel *evsel)
 void evsel__init(struct evsel *evsel,
                 struct perf_event_attr *attr, int idx)
 {
-       perf_evsel__init(&evsel->core, attr);
-       evsel->idx         = idx;
+       perf_evsel__init(&evsel->core, attr, idx);
        evsel->tracking    = !idx;
        evsel->leader      = evsel;
        evsel->unit        = "";
index bdad52a..09c290b 100644 (file)
@@ -49,7 +49,6 @@ struct evsel {
        struct perf_evsel       core;
        struct evlist           *evlist;
        off_t                   id_offset;
-       int                     idx;
        int                     id_pos;
        int                     is_pos;
        unsigned int            sample_size;
@@ -406,7 +405,7 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target,
 
 static inline int evsel__group_idx(struct evsel *evsel)
 {
-       return evsel->idx - evsel->leader->idx;
+       return evsel->core.idx - evsel->leader->core.idx;
 }
 
 /* Iterates group WITHOUT the leader. */
index 0158d29..9c8efb1 100644 (file)
@@ -789,7 +789,7 @@ static int write_group_desc(struct feat_fd *ff,
        evlist__for_each_entry(evlist, evsel) {
                if (evsel__is_group_leader(evsel) && evsel->core.nr_members > 1) {
                        const char *name = evsel->group_name ?: "{anon_group}";
-                       u32 leader_idx = evsel->idx;
+                       u32 leader_idx = evsel->core.idx;
                        u32 nr_members = evsel->core.nr_members;
 
                        ret = do_write_string(ff, name);
@@ -1844,7 +1844,7 @@ static struct evsel *read_event_desc(struct feat_fd *ff)
                msz = sz;
 
        for (i = 0, evsel = events; i < nre; evsel++, i++) {
-               evsel->idx = i;
+               evsel->core.idx = i;
 
                /*
                 * must read entire on-file attr struct to
@@ -2379,7 +2379,7 @@ static struct evsel *evlist__find_by_index(struct evlist *evlist, int idx)
        struct evsel *evsel;
 
        evlist__for_each_entry(evlist, evsel) {
-               if (evsel->idx == idx)
+               if (evsel->core.idx == idx)
                        return evsel;
        }
 
@@ -2393,7 +2393,7 @@ static void evlist__set_event_name(struct evlist *evlist, struct evsel *event)
        if (!event->name)
                return;
 
-       evsel = evlist__find_by_index(evlist, event->idx);
+       evsel = evlist__find_by_index(evlist, event->core.idx);
        if (!evsel)
                return;
 
@@ -2739,7 +2739,7 @@ static int process_group_desc(struct feat_fd *ff, void *data __maybe_unused)
 
        i = nr = 0;
        evlist__for_each_entry(session->evlist, evsel) {
-               if (evsel->idx == (int) desc[i].leader_idx) {
+               if (evsel->core.idx == (int) desc[i].leader_idx) {
                        evsel->leader = evsel;
                        /* {anon_group} is a dummy name */
                        if (strcmp(desc[i].name, "{anon_group}")) {
index d3cf2de..d956d9c 100644 (file)
@@ -219,7 +219,7 @@ static struct evsel *find_evsel_group(struct evlist *perf_evlist,
                if (has_constraint && ev->weak_group)
                        continue;
                /* Ignore event if already used and merging is disabled. */
-               if (metric_no_merge && test_bit(ev->idx, evlist_used))
+               if (metric_no_merge && test_bit(ev->core.idx, evlist_used))
                        continue;
                if (!has_constraint && ev->leader != current_leader) {
                        /*
@@ -269,7 +269,7 @@ static struct evsel *find_evsel_group(struct evlist *perf_evlist,
        for (i = 0; i < idnum; i++) {
                ev = metric_events[i];
                /* Don't free the used events. */
-               set_bit(ev->idx, evlist_used);
+               set_bit(ev->core.idx, evlist_used);
                /*
                 * The metric leader points to the identically named event in
                 * metric_events.
@@ -291,7 +291,7 @@ static struct evsel *find_evsel_group(struct evlist *perf_evlist,
                            evsel_same_pmu_or_none(ev->leader, metric_events[i]->leader))
                                break;
                        if (!strcmp(metric_events[i]->name, ev->name)) {
-                               set_bit(ev->idx, evlist_used);
+                               set_bit(ev->core.idx, evlist_used);
                                ev->metric_leader = metric_events[i];
                        }
                }
@@ -391,7 +391,7 @@ static int metricgroup__setup_events(struct list_head *groups,
        }
 
        evlist__for_each_entry_safe(perf_evlist, tmp, evsel) {
-               if (!test_bit(evsel->idx, evlist_used)) {
+               if (!test_bit(evsel->core.idx, evlist_used)) {
                        evlist__remove(perf_evlist, evsel);
                        evsel__delete(evsel);
                }
@@ -1312,7 +1312,7 @@ int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp,
                nd = rblist__entry(old_metric_events, i);
                old_me = container_of(nd, struct metric_event, nd);
 
-               evsel = evlist__find_evsel(evlist, old_me->evsel->idx);
+               evsel = evlist__find_evsel(evlist, old_me->evsel->core.idx);
                if (!evsel)
                        return -EINVAL;
                new_me = metricgroup__lookup(new_metric_events, evsel, true);
@@ -1320,7 +1320,7 @@ int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp,
                        return -ENOMEM;
 
                pr_debug("copying metric event for cgroup '%s': %s (idx=%d)\n",
-                        cgrp ? cgrp->name : "root", evsel->name, evsel->idx);
+                        cgrp ? cgrp->name : "root", evsel->name, evsel->core.idx);
 
                list_for_each_entry(old_expr, &old_me->head, nd) {
                        new_expr = malloc(sizeof(*new_expr));
@@ -1363,7 +1363,7 @@ int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp,
                        /* copy evsel in the same position */
                        for (idx = 0; idx < nr; idx++) {
                                evsel = old_expr->metric_events[idx];
-                               evsel = evlist__find_evsel(evlist, evsel->idx);
+                               evsel = evlist__find_evsel(evlist, evsel->core.idx);
                                if (evsel == NULL) {
                                        free(new_expr->metric_events);
                                        free(new_expr->metric_refs);
index 84108c1..e936c7c 100644 (file)
@@ -1740,7 +1740,7 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list,
 
        leader = list_first_entry(list, struct evsel, core.node);
        evsel = list_last_entry(list, struct evsel, core.node);
-       total_members = evsel->idx - leader->idx + 1;
+       total_members = evsel->core.idx - leader->core.idx + 1;
 
        leaders = calloc(total_members, sizeof(uintptr_t));
        if (WARN_ON(!leaders))
index 412f8e7..8feef3a 100644 (file)
@@ -1032,7 +1032,7 @@ static PyObject *pyrf_evlist__add(struct pyrf_evlist *pevlist,
 
        Py_INCREF(pevsel);
        evsel = &((struct pyrf_evsel *)pevsel)->evsel;
-       evsel->idx = evlist->core.nr_entries;
+       evsel->core.idx = evlist->core.nr_entries;
        evlist__add(evlist, evsel);
 
        return Py_BuildValue("i", evlist->core.nr_entries);
index 4bd5e5a..545e449 100644 (file)
@@ -139,7 +139,7 @@ static int evlist__init_callchain_streams(struct evlist *evlist,
 
                hists__output_resort(hists, NULL);
                init_hot_callchain(hists, &es[i]);
-               es[i].evsel_idx = pos->idx;
+               es[i].evsel_idx = pos->core.idx;
                i++;
        }