From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753370AbdKMPqU (ORCPT ); Mon, 13 Nov 2017 10:46:20 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:50210 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753062AbdKMPqT (ORCPT ); Mon, 13 Nov 2017 10:46:19 -0500 Subject: Re: [PATCH 16/35] perf annotate: Add samples into struct annotation_line To: Jiri Olsa Cc: Arnaldo Carvalho de Melo , lkml , Ingo Molnar , Namhyung Kim , David Ahern , Peter Zijlstra , Andi Kleen , ravi.bangoria@linux.vnet.ibm.com References: <20171011150158.11895-1-jolsa@kernel.org> <20171011150158.11895-17-jolsa@kernel.org> From: Ravi Bangoria Date: Mon, 13 Nov 2017 21:16:20 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171011150158.11895-17-jolsa@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 17111315-0040-0000-0000-0000040DC154 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17111315-0041-0000-0000-000020B07101 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-13_08:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=2 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1711130219 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jiri, This patch seems to be causing segfault with "perf top --stdio". Steps to reproduce: 1. start "perf top --stdio" in one terminal 2. run some simple workload in another terminal, let it get finished. 3. annotate function from previous workload in perf top (press 'a' followed by 's') Perf will crash with:   perf: Segmentation fault   Obtained 8 stack frames.   ./perf(sighandler_dump_stack+0x3e) [0x4f1b6e]   /lib64/libc.so.6(+0x36a7f) [0x7ff3aa7e4a7f]   ./perf() [0x4a27fd]   ./perf(symbol__annotate+0x199) [0x4a4439]   ./perf() [0x44e32d]   ./perf() [0x44f098]   /lib64/libpthread.so.0(+0x736c) [0x7ff3acee836c]   /lib64/libc.so.6(clone+0x3e) [0x7ff3aa8bee1e] Can you please check. Thanks, Ravi On 10/11/2017 08:31 PM, Jiri Olsa wrote: > Adding samples array into struct annotation_line to > hold the annotation data. The data are populated in > the following patches. > > Link: http://lkml.kernel.org/n/tip-97yja5m7z9brrcuf2gwr56t2@git.kernel.org > Signed-off-by: Jiri Olsa > --- > tools/perf/util/annotate.c | 8 ++++++++ > tools/perf/util/annotate.h | 17 ++++++++++++----- > 2 files changed, 20 insertions(+), 5 deletions(-) > > diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c > index 8e1e88aab45a..1b5c7d0a53e8 100644 > --- a/tools/perf/util/annotate.c > +++ b/tools/perf/util/annotate.c > @@ -901,7 +901,14 @@ static struct annotation_line* > annotation_line__new(struct annotate_args *args, size_t privsize) > { > struct annotation_line *al; > + struct perf_evsel *evsel = args->evsel; > size_t size = privsize + sizeof(*al); > + int nr = 1; > + > + if (perf_evsel__is_group_event(evsel)) > + nr = evsel->nr_members; > + > + size += sizeof(al->samples[0]) * nr; > > al = zalloc(size); > if (al) { > @@ -910,6 +917,7 @@ annotation_line__new(struct annotate_args *args, size_t privsize) > al->offset = args->offset; > al->line = strdup(args->line); > al->line_nr = args->line_nr; > + al->samples_nr = nr; > } > > return al; > diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h > index a02a2bf4f2ab..9c722a7e5f6d 100644 > --- a/tools/perf/util/annotate.h > +++ b/tools/perf/util/annotate.h > @@ -58,6 +58,16 @@ bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2); > > struct annotation; > > +struct sym_hist_entry { > + u64 nr_samples; > + u64 period; > +}; > + > +struct annotation_data { > + double percent; > + struct sym_hist_entry he; > +}; > + > struct annotation_line { > struct list_head node; > struct rb_node rb_node; > @@ -67,6 +77,8 @@ struct annotation_line { > float ipc; > u64 cycles; > size_t privsize; > + int samples_nr; > + struct annotation_data samples[0]; > }; > > struct disasm_line { > @@ -87,11 +99,6 @@ static inline bool disasm_line__has_offset(const struct disasm_line *dl) > return dl->ops.target.offset_avail; > } > > -struct sym_hist_entry { > - u64 nr_samples; > - u64 period; > -}; > - > void disasm_line__free(struct disasm_line *dl); > struct annotation_line* > annotation_line__next(struct annotation_line *pos, struct list_head *head);