forked from Minki/linux
perf/urgent fixes:
. 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> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJTC5StAAoJENZQFvNTUqpAzkAP/itdo0ORFbRxhV3LZSDrjw38 UqzaDCUueZS7Uz4JJT2RPegOZydEoNRDzaPDfJayfuRlRKNqM6jN59QaNTGCbqJa p738wuLhRRDAGH6w+ilbW52pN6SiA9p33llWFmm8KocrurPNSQQP/40Ea7UjMPAT Rn/vFyR/sLbamISv5y1r6PRuYj+dnpRdPaJsM9d4tPCzw0URMvE76JzhKkMyDve5 0vlaCezsPb+caJhsaa3Qn5zsqMQ6WDL7feNA1dGVidDUZ+OpQVkf9SS4t+vqSVB8 3S6ISalveIfVxsmc+WOEq2rPEwtxK5ng2PxlUq/bOBGKoGHfPVS6ev3etTtaD+OC ByrCCCdRqlQ3LYqsZX/4QvGW0mF91BHpF0cLr1cV1bKLDdeZ5ART6hwI0AZLJvk/ qV1zkTBxphq7Nyh2q1KUHK5d2KyVOUh8KhmnUXLMWX5w87rkAVh8rawH/ZghPBPn WfPbkf3Dzk5yghc9PIiaPKmxPl1ijW0/ylh+FksfOOAZi7TOj6b/zZ96A5r020Xh ouGho81yVpCqZ41oljI2VsPQXDDPthw2VVzfLtVGQKPbeTbvtFU0ygau+RqitcoZ rxZvWXK1I4szAhIvD3RjiJnNaIRexXzOvGYEVXm1pm/67DzPIrY7hOUvccmoBj/F yVVMOeRpvxQ9oz3Scegn =MmHA -----END PGP SIGNATURE----- Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/linux/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>
This commit is contained in:
commit
b6e53f321e
@ -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);
|
||||
@ -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;
|
||||
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;
|
||||
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);
|
||||
@ -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:
|
||||
|
@ -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 ||
|
||||
@ -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(¬es->lock);
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
*/
|
||||
|
||||
#include "util.h"
|
||||
#include "ui/ui.h"
|
||||
#include "sort.h"
|
||||
#include "build-id.h"
|
||||
#include "color.h"
|
||||
#include "cache.h"
|
||||
@ -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);
|
||||
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user