perf annotate: Remove sym_hist.addr[] array
authorNamhyung Kim <namhyung@kernel.org>
Mon, 4 Mar 2024 23:08:14 +0000 (15:08 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Thu, 7 Mar 2024 04:25:36 +0000 (20:25 -0800)
It's not used anymore and the code is coverted to use a hash map.  Now
sym_hist has a static size, so no need to have sizeof_sym_hist in the
struct annotated_source.

Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240304230815.1440583-4-namhyung@kernel.org
tools/perf/util/annotate.c
tools/perf/util/annotate.h

index 1451699d931d900b376173aa352a957656c9879f..ac002d907d81801c941876731e29acfc8dcf97b3 100644 (file)
@@ -896,33 +896,10 @@ static __maybe_unused void annotated_source__delete(struct annotated_source *src
 }
 
 static int annotated_source__alloc_histograms(struct annotated_source *src,
-                                             size_t size, int nr_hists)
+                                             int nr_hists)
 {
-       size_t sizeof_sym_hist;
-
-       /*
-        * Add buffer of one element for zero length symbol.
-        * When sample is taken from first instruction of
-        * zero length symbol, perf still resolves it and
-        * shows symbol name in perf report and allows to
-        * annotate it.
-        */
-       if (size == 0)
-               size = 1;
-
-       /* Check for overflow when calculating sizeof_sym_hist */
-       if (size > (SIZE_MAX - sizeof(struct sym_hist)) / sizeof(struct sym_hist_entry))
-               return -1;
-
-       sizeof_sym_hist = (sizeof(struct sym_hist) + size * sizeof(struct sym_hist_entry));
-
-       /* Check for overflow in zalloc argument */
-       if (sizeof_sym_hist > SIZE_MAX / nr_hists)
-               return -1;
-
-       src->sizeof_sym_hist = sizeof_sym_hist;
        src->nr_histograms   = nr_hists;
-       src->histograms      = calloc(nr_hists, sizeof_sym_hist) ;
+       src->histograms      = calloc(nr_hists, sizeof(*src->histograms));
 
        if (src->histograms == NULL)
                return -1;
@@ -941,7 +918,7 @@ void symbol__annotate_zero_histograms(struct symbol *sym)
        annotation__lock(notes);
        if (notes->src != NULL) {
                memset(notes->src->histograms, 0,
-                      notes->src->nr_histograms * notes->src->sizeof_sym_hist);
+                      notes->src->nr_histograms * sizeof(*notes->src->histograms));
                hashmap__clear(notes->src->samples);
        }
        if (notes->branch && notes->branch->cycles_hist) {
@@ -1039,9 +1016,7 @@ static int __symbol__inc_addr_samples(struct map_symbol *ms,
        }
 
        h->nr_samples++;
-       h->addr[offset].nr_samples++;
        h->period += sample->period;
-       h->addr[offset].period += sample->period;
        entry->nr_samples++;
        entry->period += sample->period;
 
@@ -1094,8 +1069,7 @@ struct annotated_source *symbol__hists(struct symbol *sym, int nr_hists)
 
        if (notes->src->histograms == NULL) {
 alloc_histograms:
-               annotated_source__alloc_histograms(notes->src, symbol__size(sym),
-                                                  nr_hists);
+               annotated_source__alloc_histograms(notes->src, nr_hists);
        }
 
        return notes->src;
@@ -2854,7 +2828,7 @@ void symbol__annotate_zero_histogram(struct symbol *sym, int evidx)
        struct annotation *notes = symbol__annotation(sym);
        struct sym_hist *h = annotation__histogram(notes, evidx);
 
-       memset(h, 0, notes->src->sizeof_sym_hist);
+       memset(h, 0, sizeof(*notes->src->histograms) * notes->src->nr_histograms);
 }
 
 void symbol__annotate_decay_histogram(struct symbol *sym, int evidx)
index 3362980a5d3d18a2746f02b842b344863213928d..4bdc70a9d3764570fc53fced8c319bf022a84f94 100644 (file)
@@ -242,7 +242,6 @@ void symbol__calc_percent(struct symbol *sym, struct evsel *evsel);
 struct sym_hist {
        u64                   nr_samples;
        u64                   period;
-       struct sym_hist_entry addr[];
 };
 
 struct cyc_hist {
@@ -278,7 +277,6 @@ struct cyc_hist {
  */
 struct annotated_source {
        struct list_head        source;
-       size_t                  sizeof_sym_hist;
        struct sym_hist         *histograms;
        struct annotation_line  **offsets;
        struct hashmap          *samples;
@@ -348,7 +346,7 @@ void annotation__toggle_full_addr(struct annotation *notes, struct map_symbol *m
 
 static inline struct sym_hist *annotated_source__histogram(struct annotated_source *src, int idx)
 {
-       return ((void *)src->histograms) + (src->sizeof_sym_hist * idx);
+       return &src->histograms[idx];
 }
 
 static inline struct sym_hist *annotation__histogram(struct annotation *notes, int idx)