Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753431AbbLDMxn (ORCPT ); Fri, 4 Dec 2015 07:53:43 -0500 Received: from mail-pf0-f175.google.com ([209.85.192.175]:36674 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751668AbbLDMxm (ORCPT ); Fri, 4 Dec 2015 07:53:42 -0500 Date: Fri, 4 Dec 2015 21:46:18 +0900 From: Namhyung Kim To: "Wangnan (F)" Cc: acme@kernel.org, lizefan@huawei.com, pi3orama@163.com, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo Subject: Re: [PATCH 2/2] perf hists browser: Reset selection when refresh Message-ID: <20151204124618.GA22102@danjae.kornet> References: <1449060693-236232-1-git-send-email-wangnan0@huawei.com> <1449060693-236232-2-git-send-email-wangnan0@huawei.com> <20151202161728.GC27992@danjae.kornet> <565FB169.2020709@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <565FB169.2020709@huawei.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5766 Lines: 157 Hi, On Thu, Dec 03, 2015 at 11:05:13AM +0800, Wangnan (F) wrote: > On 2015/12/3 0:17, Namhyung Kim wrote: > >On Wed, Dec 02, 2015 at 12:51:33PM +0000, Wang Nan wrote: > >>With following steps: > >> > >> Step 1: perf report > >> > >> Step 2: Use UP/DOWN to select an entry, don't press 'ENTER' > >> > >> Step 3: Use '/' to filter symbols, use a filter which returns > >> empty result > >> > >> Step 4: Press 'ENTER' > >> > >>We see that, even if we have filter all symbols (and the main interface > >>is empty), pressing 'ENTER' still select one symbol. This behavior > >>surprise user. This patch resets browser->selection in > >>hist_browser__refresh() and let it choose default selection. In this > >>case browser->selection keeps NULL so user won't see annotation item > >>in menu. > >> > >>Signed-off-by: Wang Nan > >>Cc: Arnaldo Carvalho de Melo > >>Cc: Namhyung Kim > >>--- > >> > >>Note that if this patch is applied before 1/2 then the steps listed in > >>commit message in 1/2 won't trigger segfault. However I believe patch 1/1 > >>is still required. > >> > >>--- > >> tools/perf/ui/browsers/hists.c | 6 ++++-- > >> 1 file changed, 4 insertions(+), 2 deletions(-) > >> > >>diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c > >>index 9458da8..523a9ef 100644 > >>--- a/tools/perf/ui/browsers/hists.c > >>+++ b/tools/perf/ui/browsers/hists.c > >>@@ -1192,6 +1192,7 @@ static unsigned int hist_browser__refresh(struct ui_browser *browser) > >> } > >> ui_browser__hists_init_top(browser); > >>+ hb->selection = NULL; > >This code assumes that hb->selection is not NULL if hb->he_selection > >is not NULL. So I think that the right (and simple) fix is to reset > >hb->he_selection rather than hb->selection (or both). It'll make the > >change below unnecessary IMHO. > > No. Only set hb->he_selection causes crash: > > Step 0: user 'perf record ls' create a perf.data without callchain; > Step 1: perf report > Step 2: choose a annotable entry, don't press 'ENTER' > Step 3: use '/' and enter a filter like 'asdfasdf' which ensure no entry > would be left > Step 3: Press 'ENTER' twice > > Crash: > # ./perf report > perf: Segmentation fault > -------- backtrace -------- > ./perf[0x53e588] > /tmp/oxygen_root/lib64/libc.so.6(+0x3545f)[0x7f2b4d6da45f] > ./perf[0x539e03] > ./perf(perf_evlist__tui_browse_hists+0x96)[0x53d226] > ./perf(cmd_report+0x1b9f)[0x442c7f] > ./perf[0x47efc2] > ./perf(main+0x5f5)[0x432fa5] > /tmp/oxygen_root/lib64/libc.so.6(__libc_start_main+0xf4)[0x7f2b4d6c6bd4] > ./perf[0x4330d4] > > > GDB result: > > Program received signal SIGSEGV, Segmentation fault. > hist_browser__toggle_fold (browser=0x1f71160) at ui/browsers/hists.c:352 So this is same crash you already fixed. Now I think that it'd be better to check hb->he_selection instead of hb->selection in that patch for the sake of consistency. > (gdb) bt > #0 hist_browser__toggle_fold (browser=0x1f71160) at ui/browsers/hists.c:352 > #1 hist_browser__run (help=0x649038 "For a higher level overview, try: perf > report --sort comm,dso", browser=0x1f71160) at ui/ > browsers/hists.c:539 > #2 perf_evsel__hists_browse (evsel=0x19ef140, nr_events=nr_events@entry=1, > helpline=helpline@entry=0x649038 "For a higher leve > l overview, try: perf report --sort comm,dso", > left_exits=left_exits@entry=false, hbt=hbt@entry=0x0, min_pcnt= out>, > env=0x19ed850) at ui/browsers/hists.c:2101 > #3 0x000000000053d227 in perf_evlist__tui_browse_hists (evlist=0x19ee730, > help=help@entry=0x649038 "For a higher level overvie > w, try: perf report --sort comm,dso", hbt=hbt@entry=0x0, min_pcnt= out>, env=) at ui/browsers/hists.c: > 2555 > #4 0x0000000000442c80 in report__browse_hists (rep=0x7fffffffca20) at > builtin-report.c:440 > #5 __cmd_report (rep=0x7fffffffca20) at builtin-report.c:576 > #6 cmd_report (argc=0, argv=0x7fffffffe590, prefix=) at > builtin-report.c:962 > #7 0x000000000047efc3 in run_builtin (p=p@entry=0x8ff9e0 , > argc=argc@entry=1, argv=argv@entry=0x7fffffffe590) at > perf.c:387 > #8 0x0000000000432fa6 in handle_internal_command (argv=0x7fffffffe590, > argc=1) at perf.c:448 > #9 run_argv (argv=0x7fffffffe310, argcp=0x7fffffffe31c) at perf.c:492 > #10 main (argc=1, argv=0x7fffffffe590) at perf.c:609 > > But setting both of them to NULL in hist_browser__refresh() can avoid this > crash. > > So we have two choice: > > 1. In hist_browser__refresh() let's set both selection and he_selection to > NULL; > > By this way after step 3 we won't see annotation options. The context > menu > (by pressing ENTER or 'm') is: > > Run scripts for all samples > Switch to another data file in PWD > Exit > > > 2. In hist_browser__toggle_fold() let's check both he amd ms. > > By this way we still get annotation and map options in context menu: > > Annotate __strcoll_l > Browse map details > Run scripts for all samples > Switch to another data file in PWD > Exit > > I'm not sure which one is better because I don't really understand this part > of > code. But for me the second result is surprising because I have filtered all > entries out in my interface, and I believe I should select nothing, so > pressing > 'ENTER' or 'm' I shall not get annotation option because I don't know which > entry > would be annotated. Agreed. I also think that the choice 1 is the right thing. Thanks, Namhyung -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/