From: Madhavan Srinivasan <ma...@linux.vnet.ibm.com> To enable hazard mode with perf report (followup patch) we need to have cpu pipeline hazard data available in hist_entry. Add hazard info into struct hist_entry. Also add hazard_info as parameter to hists__add_entry().
Signed-off-by: Madhavan Srinivasan <ma...@linux.vnet.ibm.com> Signed-off-by: Ravi Bangoria <ravi.bango...@linux.ibm.com> --- tools/perf/builtin-annotate.c | 2 +- tools/perf/builtin-c2c.c | 4 ++-- tools/perf/builtin-diff.c | 6 +++--- tools/perf/tests/hists_link.c | 4 ++-- tools/perf/util/hist.c | 22 +++++++++++++++------- tools/perf/util/hist.h | 2 ++ tools/perf/util/sort.h | 1 + 7 files changed, 26 insertions(+), 15 deletions(-) diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 6c0a0412502e..78552a9428a6 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c @@ -249,7 +249,7 @@ static int perf_evsel__add_sample(struct evsel *evsel, if (ann->has_br_stack && has_annotation(ann)) return process_branch_callback(evsel, sample, al, ann, machine); - he = hists__add_entry(hists, al, NULL, NULL, NULL, sample, true); + he = hists__add_entry(hists, al, NULL, NULL, NULL, NULL, sample, true); if (he == NULL) return -ENOMEM; diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 246ac0b4d54f..2a1cb5cda6d9 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -292,7 +292,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused, c2c_decode_stats(&stats, mi); he = hists__add_entry_ops(&c2c_hists->hists, &c2c_entry_ops, - &al, NULL, NULL, mi, + &al, NULL, NULL, mi, NULL, sample, true); if (he == NULL) goto free_mi; @@ -326,7 +326,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused, goto free_mi; he = hists__add_entry_ops(&c2c_hists->hists, &c2c_entry_ops, - &al, NULL, NULL, mi, + &al, NULL, NULL, mi, NULL, sample, true); if (he == NULL) goto free_mi; diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index f8b6ae557d8b..e32e91f89a18 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -412,15 +412,15 @@ static int diff__process_sample_event(struct perf_tool *tool, } if (compute != COMPUTE_CYCLES) { - if (!hists__add_entry(hists, &al, NULL, NULL, NULL, sample, - true)) { + if (!hists__add_entry(hists, &al, NULL, NULL, NULL, NULL, + sample, true)) { pr_warning("problem incrementing symbol period, " "skipping event\n"); goto out_put; } } else { if (!hists__add_entry_ops(hists, &block_hist_ops, &al, NULL, - NULL, NULL, sample, true)) { + NULL, NULL, NULL, sample, true)) { pr_warning("problem incrementing symbol period, " "skipping event\n"); goto out_put; diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c index a024d3f3a412..112a90818d2e 100644 --- a/tools/perf/tests/hists_link.c +++ b/tools/perf/tests/hists_link.c @@ -86,7 +86,7 @@ static int add_hist_entries(struct evlist *evlist, struct machine *machine) if (machine__resolve(machine, &al, &sample) < 0) goto out; - he = hists__add_entry(hists, &al, NULL, + he = hists__add_entry(hists, &al, NULL, NULL, NULL, NULL, &sample, true); if (he == NULL) { addr_location__put(&al); @@ -105,7 +105,7 @@ static int add_hist_entries(struct evlist *evlist, struct machine *machine) if (machine__resolve(machine, &al, &sample) < 0) goto out; - he = hists__add_entry(hists, &al, NULL, + he = hists__add_entry(hists, &al, NULL, NULL, NULL, NULL, &sample, true); if (he == NULL) { addr_location__put(&al); diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index ca5a8f4d007e..6d23efaa52c8 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -604,6 +604,7 @@ static struct hist_entry *hists__findnew_entry(struct hists *hists, * and will not be used anymore. */ mem_info__zput(entry->mem_info); + zfree(&entry->haz_data); block_info__zput(entry->block_info); @@ -678,6 +679,7 @@ __hists__add_entry(struct hists *hists, struct symbol *sym_parent, struct branch_info *bi, struct mem_info *mi, + struct perf_pipeline_haz_data *haz_data, struct block_info *block_info, struct perf_sample *sample, bool sample_self, @@ -712,6 +714,7 @@ __hists__add_entry(struct hists *hists, .hists = hists, .branch_info = bi, .mem_info = mi, + .haz_data = haz_data, .block_info = block_info, .transaction = sample->transaction, .raw_data = sample->raw_data, @@ -732,10 +735,11 @@ struct hist_entry *hists__add_entry(struct hists *hists, struct symbol *sym_parent, struct branch_info *bi, struct mem_info *mi, + struct perf_pipeline_haz_data *haz_data, struct perf_sample *sample, bool sample_self) { - return __hists__add_entry(hists, al, sym_parent, bi, mi, NULL, + return __hists__add_entry(hists, al, sym_parent, bi, mi, haz_data, NULL, sample, sample_self, NULL); } @@ -745,10 +749,11 @@ struct hist_entry *hists__add_entry_ops(struct hists *hists, struct symbol *sym_parent, struct branch_info *bi, struct mem_info *mi, + struct perf_pipeline_haz_data *haz_data, struct perf_sample *sample, bool sample_self) { - return __hists__add_entry(hists, al, sym_parent, bi, mi, NULL, + return __hists__add_entry(hists, al, sym_parent, bi, mi, haz_data, NULL, sample, sample_self, ops); } @@ -823,7 +828,7 @@ iter_add_single_mem_entry(struct hist_entry_iter *iter, struct addr_location *al sample->period = cost; he = hists__add_entry(hists, al, iter->parent, NULL, mi, - sample, true); + NULL, sample, true); if (!he) return -ENOMEM; @@ -926,7 +931,7 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a sample->weight = bi->flags.cycles ? bi->flags.cycles : 1; he = hists__add_entry(hists, al, iter->parent, &bi[i], NULL, - sample, true); + NULL, sample, true); if (he == NULL) return -ENOMEM; @@ -963,7 +968,7 @@ iter_add_single_normal_entry(struct hist_entry_iter *iter, struct addr_location struct hist_entry *he; he = hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL, - sample, true); + NULL, sample, true); if (he == NULL) return -ENOMEM; @@ -1024,7 +1029,7 @@ iter_add_single_cumulative_entry(struct hist_entry_iter *iter, int err = 0; he = hists__add_entry(hists, al, iter->parent, NULL, NULL, - sample, true); + NULL, sample, true); if (he == NULL) return -ENOMEM; @@ -1101,7 +1106,7 @@ iter_add_next_cumulative_entry(struct hist_entry_iter *iter, } he = hists__add_entry(evsel__hists(evsel), al, iter->parent, NULL, NULL, - sample, false); + NULL, sample, false); if (he == NULL) return -ENOMEM; @@ -1268,6 +1273,9 @@ void hist_entry__delete(struct hist_entry *he) mem_info__zput(he->mem_info); } + if (he->haz_data) + zfree(&he->haz_data); + if (he->block_info) block_info__zput(he->block_info); diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 0aa63aeb58ec..a4d12a503126 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -139,6 +139,7 @@ struct hist_entry *hists__add_entry(struct hists *hists, struct symbol *parent, struct branch_info *bi, struct mem_info *mi, + struct perf_pipeline_haz_data *haz_data, struct perf_sample *sample, bool sample_self); @@ -148,6 +149,7 @@ struct hist_entry *hists__add_entry_ops(struct hists *hists, struct symbol *sym_parent, struct branch_info *bi, struct mem_info *mi, + struct perf_pipeline_haz_data *haz_data, struct perf_sample *sample, bool sample_self); diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h index 6c862d62d052..55eb65fd593f 100644 --- a/tools/perf/util/sort.h +++ b/tools/perf/util/sort.h @@ -139,6 +139,7 @@ struct hist_entry { long time; struct hists *hists; struct mem_info *mem_info; + struct perf_pipeline_haz_data *haz_data; struct block_info *block_info; void *raw_data; u32 raw_size; -- 2.21.1