Skip to content

Commit

Permalink
Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/lin…
Browse files Browse the repository at this point in the history
…ux/kernel/git/acme/linux into perf/urgent

Pull perf/urgent fixes from Arnaldo Carvalho de Melo:

  * Fix annotation on stdio/GTK+ interfaces (Namhyung Kim)

  * Fix file descriptor leaking while searching DSOs for suitable symtab (Namhyung Kim).

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Ingo Molnar committed Feb 27, 2014
2 parents e3703f8 + 98e9f03 commit b6e53f3
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 19 deletions.
40 changes: 24 additions & 16 deletions tools/perf/builtin-report.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,16 @@ static int report__add_mem_hist_entry(struct perf_tool *tool, struct addr_locati
if (!he)
return -ENOMEM;

err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
if (err)
goto out;
if (ui__has_annotation()) {
err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
if (err)
goto out;

mx = he->mem_info;
err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
if (err)
goto out;
mx = he->mem_info;
err = addr_map_symbol__inc_samples(&mx->daddr, evsel->idx);
if (err)
goto out;
}

evsel->hists.stats.total_period += cost;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
Expand Down Expand Up @@ -164,14 +166,18 @@ static int report__add_branch_hist_entry(struct perf_tool *tool, struct addr_loc
he = __hists__add_entry(&evsel->hists, al, parent, &bi[i], NULL,
1, 1, 0);
if (he) {
bx = he->branch_info;
err = addr_map_symbol__inc_samples(&bx->from, evsel->idx);
if (err)
goto out;

err = addr_map_symbol__inc_samples(&bx->to, evsel->idx);
if (err)
goto out;
if (ui__has_annotation()) {
bx = he->branch_info;
err = addr_map_symbol__inc_samples(&bx->from,
evsel->idx);
if (err)
goto out;

err = addr_map_symbol__inc_samples(&bx->to,
evsel->idx);
if (err)
goto out;
}

evsel->hists.stats.total_period += 1;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
Expand Down Expand Up @@ -205,7 +211,9 @@ static int report__add_hist_entry(struct perf_tool *tool, struct perf_evsel *evs
if (err)
goto out;

err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);
if (ui__has_annotation())
err = hist_entry__inc_addr_samples(he, evsel->idx, al->addr);

evsel->hists.stats.total_period += sample->period;
hists__inc_nr_events(&evsel->hists, PERF_RECORD_SAMPLE);
out:
Expand Down
6 changes: 4 additions & 2 deletions tools/perf/builtin-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ static void perf_top__record_precise_ip(struct perf_top *top,
{
struct annotation *notes;
struct symbol *sym;
int err;
int err = 0;

if (he == NULL || he->ms.sym == NULL ||
((top->sym_filter_entry == NULL ||
Expand All @@ -190,7 +190,9 @@ static void perf_top__record_precise_ip(struct perf_top *top,
return;

ip = he->ms.map->map_ip(he->ms.map, ip);
err = hist_entry__inc_addr_samples(he, counter, ip);

if (ui__has_annotation())
err = hist_entry__inc_addr_samples(he, counter, ip);

pthread_mutex_unlock(&notes->lock);

Expand Down
9 changes: 8 additions & 1 deletion tools/perf/util/annotate.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
*/

#include "util.h"
#include "ui/ui.h"
#include "sort.h"
#include "build-id.h"
#include "color.h"
#include "cache.h"
Expand Down Expand Up @@ -489,7 +491,7 @@ static int symbol__inc_addr_samples(struct symbol *sym, struct map *map,
{
struct annotation *notes;

if (sym == NULL || use_browser != 1 || !sort__has_sym)
if (sym == NULL)
return 0;

notes = symbol__annotation(sym);
Expand Down Expand Up @@ -1399,3 +1401,8 @@ int hist_entry__annotate(struct hist_entry *he, size_t privsize)
{
return symbol__annotate(he->ms.sym, he->ms.map, privsize);
}

bool ui__has_annotation(void)
{
return use_browser == 1 && sort__has_sym;
}
2 changes: 2 additions & 0 deletions tools/perf/util/annotate.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ void symbol__annotate_zero_histogram(struct symbol *sym, int evidx);
void symbol__annotate_decay_histogram(struct symbol *sym, int evidx);
void disasm__purge(struct list_head *head);

bool ui__has_annotation(void);

int symbol__tty_annotate(struct symbol *sym, struct map *map,
struct perf_evsel *evsel, bool print_lines,
bool full_paths, int min_pcnt, int max_lines);
Expand Down
2 changes: 2 additions & 0 deletions tools/perf/util/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,8 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter)

if (syms_ss && runtime_ss)
break;
} else {
symsrc__destroy(ss);
}

}
Expand Down

0 comments on commit b6e53f3

Please sign in to comment.