| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Date: Thu, 12 Apr 2018 14:58:24 -0300 |
| Subject: perf report: Fix switching to another perf.data file |
| |
| From: Arnaldo Carvalho de Melo <acme@redhat.com> |
| |
| [ Upstream commit 7b366142a50ad79e48de8e67c5b3e8cfb9fa82dd ] |
| |
| In the TUI the 's' hotkey can be used to switch to another perf.data |
| file in the current directory, but that got broken in Fixes: |
| b01141f4f59c ("perf annotate: Initialize the priv are in symbol__new()"), |
| that would show this once another file was chosen: |
| |
| ┌─Fatal Error─────────────────────────────────────┐ |
| │Annotation needs to be init before symbol__init()│ |
| │ │ |
| │ │ |
| │Press any key... │ |
| └─────────────────────────────────────────────────┘ |
| |
| Fix it by just silently bailing out if symbol__annotation_init() was already |
| called, just like is done with symbol__init(), i.e. they are done just once at |
| session start, not when switching to a new perf.data file. |
| |
| Cc: Adrian Hunter <adrian.hunter@intel.com> |
| Cc: Andi Kleen <ak@linux.intel.com> |
| Cc: David Ahern <dsahern@gmail.com> |
| Cc: Jin Yao <yao.jin@linux.intel.com> |
| Cc: Jiri Olsa <jolsa@kernel.org> |
| Cc: Martin Liška <mliska@suse.cz> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> |
| Cc: Thomas Richter <tmricht@linux.vnet.ibm.com> |
| Cc: Wang Nan <wangnan0@huawei.com> |
| Fixes: b01141f4f59c ("perf annotate: Initialize the priv are in symbol__new()") |
| Link: https://lkml.kernel.org/n/tip-ogppdtpzfax7y1h6gjdv5s6u@git.kernel.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/perf/util/symbol.c | 8 +++----- |
| 1 file changed, 3 insertions(+), 5 deletions(-) |
| |
| --- a/tools/perf/util/symbol.c |
| +++ b/tools/perf/util/symbol.c |
| @@ -2094,16 +2094,14 @@ static bool symbol__read_kptr_restrict(v |
| |
| int symbol__annotation_init(void) |
| { |
| + if (symbol_conf.init_annotation) |
| + return 0; |
| + |
| if (symbol_conf.initialized) { |
| pr_err("Annotation needs to be init before symbol__init()\n"); |
| return -1; |
| } |
| |
| - if (symbol_conf.init_annotation) { |
| - pr_warning("Annotation being initialized multiple times\n"); |
| - return 0; |
| - } |
| - |
| symbol_conf.priv_size += sizeof(struct annotation); |
| symbol_conf.init_annotation = true; |
| return 0; |