* [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat
@ 2015-10-09 10:59 kan.liang
2015-10-09 20:59 ` Jiri Olsa
2015-10-22 9:22 ` [tip:perf/core] perf cpu_map: Fix core dump caused by per-socket/ core " tip-bot for Kan Liang
0 siblings, 2 replies; 5+ messages in thread
From: kan.liang @ 2015-10-09 10:59 UTC (permalink / raw)
To: acme; +Cc: jolsa, ak, linux-kernel, Kan Liang
From: Kan Liang <kan.liang@intel.com>
Perf will core dump if --per-socket/core -a are applied for perf stat.
The root cause is that cpu_map__build_map set refcnt of evlist's cpu_map
to 1.
It should set refcnt for the newly created cpu_map, not evlist's
cpu_map.
Here is the example:
perf stat -e cycles --per-socket -a sleep 1
Performance counter stats for 'system wide':
S0 36 30,196,257 cycles
S1 28 15,823,536 cycles
1.001126828 seconds time elapsed
*** Error in `./perf': corrupted double-linked list: 0x00000000021f9090
***
======= Backtrace: =========
/lib64/libc.so.6[0x3002e7bbe7]
/lib64/libc.so.6[0x3002e7d2b5]
./perf(perf_evsel__delete+0x28)[0x485bdd]
./perf[0x4800e8]
./perf(perf_evlist__delete+0x5e)[0x482cd5]
./perf(cmd_stat+0xf25)[0x432328]
./perf[0x4768e0]
./perf[0x476ad6]
./perf[0x476b41]
./perf(main+0x1d0)[0x476db2]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x3002e21b45]
./perf[0x4202c5]
Signed-off-by: Kan Liang <kan.liang@intel.com>
---
tools/perf/util/cpumap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c
index c51c29f..dfc1f0b 100644
--- a/tools/perf/util/cpumap.c
+++ b/tools/perf/util/cpumap.c
@@ -284,7 +284,7 @@ static int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res,
/* ensure we process id in increasing order */
qsort(c->map, c->nr, sizeof(int), cmp_ids);
- atomic_set(&cpus->refcnt, 1);
+ atomic_set(&c->refcnt, 1);
*res = c;
return 0;
}
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat 2015-10-09 10:59 [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat kan.liang @ 2015-10-09 20:59 ` Jiri Olsa 2015-10-19 22:22 ` Liang, Kan 2015-10-22 9:22 ` [tip:perf/core] perf cpu_map: Fix core dump caused by per-socket/ core " tip-bot for Kan Liang 1 sibling, 1 reply; 5+ messages in thread From: Jiri Olsa @ 2015-10-09 20:59 UTC (permalink / raw) To: kan.liang; +Cc: acme, jolsa, ak, linux-kernel On Fri, Oct 09, 2015 at 06:59:23AM -0400, kan.liang@intel.com wrote: > From: Kan Liang <kan.liang@intel.com> > > Perf will core dump if --per-socket/core -a are applied for perf stat. > > The root cause is that cpu_map__build_map set refcnt of evlist's cpu_map > to 1. > It should set refcnt for the newly created cpu_map, not evlist's > cpu_map. > > Here is the example: > > perf stat -e cycles --per-socket -a sleep 1 > > Performance counter stats for 'system wide': > > S0 36 30,196,257 cycles > S1 28 15,823,536 cycles > > 1.001126828 seconds time elapsed > > *** Error in `./perf': corrupted double-linked list: 0x00000000021f9090 > *** > ======= Backtrace: ========= > /lib64/libc.so.6[0x3002e7bbe7] > /lib64/libc.so.6[0x3002e7d2b5] > ./perf(perf_evsel__delete+0x28)[0x485bdd] > ./perf[0x4800e8] > ./perf(perf_evlist__delete+0x5e)[0x482cd5] > ./perf(cmd_stat+0xf25)[0x432328] > ./perf[0x4768e0] > ./perf[0x476ad6] > ./perf[0x476b41] > ./perf(main+0x1d0)[0x476db2] > /lib64/libc.so.6(__libc_start_main+0xf5)[0x3002e21b45] > ./perf[0x4202c5] > > Signed-off-by: Kan Liang <kan.liang@intel.com> > --- > tools/perf/util/cpumap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c > index c51c29f..dfc1f0b 100644 > --- a/tools/perf/util/cpumap.c > +++ b/tools/perf/util/cpumap.c > @@ -284,7 +284,7 @@ static int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res, > /* ensure we process id in increasing order */ > qsort(c->map, c->nr, sizeof(int), cmp_ids); > > - atomic_set(&cpus->refcnt, 1); > + atomic_set(&c->refcnt, 1); ouch ;-) Acked-by: Jiri Olsa <jolsa@kernel.org> thanks, jirka ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat 2015-10-09 20:59 ` Jiri Olsa @ 2015-10-19 22:22 ` Liang, Kan 2015-10-20 15:00 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 5+ messages in thread From: Liang, Kan @ 2015-10-19 22:22 UTC (permalink / raw) To: acme; +Cc: jolsa, ak, linux-kernel Hi Arnaldo Here is one more fix for perf/core need to be pulled. Thanks, Kan > > On Fri, Oct 09, 2015 at 06:59:23AM -0400, kan.liang@intel.com wrote: > > From: Kan Liang <kan.liang@intel.com> > > > > Perf will core dump if --per-socket/core -a are applied for perf stat. > > > > The root cause is that cpu_map__build_map set refcnt of evlist's > > cpu_map to 1. > > It should set refcnt for the newly created cpu_map, not evlist's > > cpu_map. > > > > Here is the example: > > > > perf stat -e cycles --per-socket -a sleep 1 > > > > Performance counter stats for 'system wide': > > > > S0 36 30,196,257 cycles > > S1 28 15,823,536 cycles > > > > 1.001126828 seconds time elapsed > > > > *** Error in `./perf': corrupted double-linked list: > > 0x00000000021f9090 > > *** > > ======= Backtrace: ========= > > /lib64/libc.so.6[0x3002e7bbe7] > > /lib64/libc.so.6[0x3002e7d2b5] > > ./perf(perf_evsel__delete+0x28)[0x485bdd] > > ./perf[0x4800e8] > > ./perf(perf_evlist__delete+0x5e)[0x482cd5] > > ./perf(cmd_stat+0xf25)[0x432328] > > ./perf[0x4768e0] > > ./perf[0x476ad6] > > ./perf[0x476b41] > > ./perf(main+0x1d0)[0x476db2] > > /lib64/libc.so.6(__libc_start_main+0xf5)[0x3002e21b45] > > ./perf[0x4202c5] > > > > Signed-off-by: Kan Liang <kan.liang@intel.com> > > --- > > tools/perf/util/cpumap.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index > > c51c29f..dfc1f0b 100644 > > --- a/tools/perf/util/cpumap.c > > +++ b/tools/perf/util/cpumap.c > > @@ -284,7 +284,7 @@ static int cpu_map__build_map(struct cpu_map > *cpus, struct cpu_map **res, > > /* ensure we process id in increasing order */ > > qsort(c->map, c->nr, sizeof(int), cmp_ids); > > > > - atomic_set(&cpus->refcnt, 1); > > + atomic_set(&c->refcnt, 1); > > ouch ;-) > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > thanks, > jirka ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat 2015-10-19 22:22 ` Liang, Kan @ 2015-10-20 15:00 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 5+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-10-20 15:00 UTC (permalink / raw) To: Liang, Kan; +Cc: jolsa, ak, linux-kernel Em Mon, Oct 19, 2015 at 10:22:51PM +0000, Liang, Kan escreveu: > Hi Arnaldo > > Here is one more fix for perf/core need to be pulled. Thanks for the reminder, tried to reproduce on a two socket system, couldn't, but the fix is obvious enough, thanks, applied. - Arnaldo > Thanks, > Kan > > > > > On Fri, Oct 09, 2015 at 06:59:23AM -0400, kan.liang@intel.com wrote: > > > From: Kan Liang <kan.liang@intel.com> > > > > > > Perf will core dump if --per-socket/core -a are applied for perf stat. > > > > > > The root cause is that cpu_map__build_map set refcnt of evlist's > > > cpu_map to 1. > > > It should set refcnt for the newly created cpu_map, not evlist's > > > cpu_map. > > > > > > Here is the example: > > > > > > perf stat -e cycles --per-socket -a sleep 1 > > > > > > Performance counter stats for 'system wide': > > > > > > S0 36 30,196,257 cycles > > > S1 28 15,823,536 cycles > > > > > > 1.001126828 seconds time elapsed > > > > > > *** Error in `./perf': corrupted double-linked list: > > > 0x00000000021f9090 > > > *** > > > ======= Backtrace: ========= > > > /lib64/libc.so.6[0x3002e7bbe7] > > > /lib64/libc.so.6[0x3002e7d2b5] > > > ./perf(perf_evsel__delete+0x28)[0x485bdd] > > > ./perf[0x4800e8] > > > ./perf(perf_evlist__delete+0x5e)[0x482cd5] > > > ./perf(cmd_stat+0xf25)[0x432328] > > > ./perf[0x4768e0] > > > ./perf[0x476ad6] > > > ./perf[0x476b41] > > > ./perf(main+0x1d0)[0x476db2] > > > /lib64/libc.so.6(__libc_start_main+0xf5)[0x3002e21b45] > > > ./perf[0x4202c5] > > > > > > Signed-off-by: Kan Liang <kan.liang@intel.com> > > > --- > > > tools/perf/util/cpumap.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index > > > c51c29f..dfc1f0b 100644 > > > --- a/tools/perf/util/cpumap.c > > > +++ b/tools/perf/util/cpumap.c > > > @@ -284,7 +284,7 @@ static int cpu_map__build_map(struct cpu_map > > *cpus, struct cpu_map **res, > > > /* ensure we process id in increasing order */ > > > qsort(c->map, c->nr, sizeof(int), cmp_ids); > > > > > > - atomic_set(&cpus->refcnt, 1); > > > + atomic_set(&c->refcnt, 1); > > > > ouch ;-) > > > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > > > thanks, > > jirka ^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip:perf/core] perf cpu_map: Fix core dump caused by per-socket/ core system-wide stat 2015-10-09 10:59 [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat kan.liang 2015-10-09 20:59 ` Jiri Olsa @ 2015-10-22 9:22 ` tip-bot for Kan Liang 1 sibling, 0 replies; 5+ messages in thread From: tip-bot for Kan Liang @ 2015-10-22 9:22 UTC (permalink / raw) To: linux-tip-commits Cc: kan.liang, ak, mingo, tglx, linux-kernel, acme, hpa, jolsa Commit-ID: bc1d03687b9be3a30aab8e8d78c7884449b6e511 Gitweb: http://git.kernel.org/tip/bc1d03687b9be3a30aab8e8d78c7884449b6e511 Author: Kan Liang <kan.liang@intel.com> AuthorDate: Fri, 9 Oct 2015 06:59:23 -0400 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Tue, 20 Oct 2015 15:54:20 -0300 perf cpu_map: Fix core dump caused by per-socket/core system-wide stat Perf will core dump if --per-socket/core -a are applied for perf stat. The root cause is that cpu_map__build_map set refcnt of evlist's cpu_map to 1. It should set refcnt for the newly created cpu_map, not evlist's cpu_map. Here is the example: # perf stat -e cycles --per-socket -a sleep 1 Performance counter stats for 'system wide': S0 36 30,196,257 cycles S1 28 15,823,536 cycles 1.001126828 seconds time elapsed *** Error in `./perf': corrupted double-linked list: 0x00000000021f9090 *** ======= Backtrace: ========= /lib64/libc.so.6[0x3002e7bbe7] /lib64/libc.so.6[0x3002e7d2b5] ./perf(perf_evsel__delete+0x28)[0x485bdd] ./perf[0x4800e8] ./perf(perf_evlist__delete+0x5e)[0x482cd5] ./perf(cmd_stat+0xf25)[0x432328] ./perf[0x4768e0] ./perf[0x476ad6] ./perf[0x476b41] ./perf(main+0x1d0)[0x476db2] /lib64/libc.so.6(__libc_start_main+0xf5)[0x3002e21b45] ./perf[0x4202c5] Signed-off-by: Kan Liang <kan.liang@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <ak@linux.intel.com> Link: http://lkml.kernel.org/r/1444388363-35936-1-git-send-email-kan.liang@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/cpumap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index b368453..aa6b490 100644 --- a/tools/perf/util/cpumap.c +++ b/tools/perf/util/cpumap.c @@ -285,7 +285,7 @@ int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res, /* ensure we process id in increasing order */ qsort(c->map, c->nr, sizeof(int), cmp_ids); - atomic_set(&cpus->refcnt, 1); + atomic_set(&c->refcnt, 1); *res = c; return 0; } ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-22 9:23 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-10-09 10:59 [PATCH 1/1] perf,tools: fix core dump caused by per-socket/core system-wide stat kan.liang 2015-10-09 20:59 ` Jiri Olsa 2015-10-19 22:22 ` Liang, Kan 2015-10-20 15:00 ` Arnaldo Carvalho de Melo 2015-10-22 9:22 ` [tip:perf/core] perf cpu_map: Fix core dump caused by per-socket/ core " tip-bot for Kan Liang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome