lkml.org 
[lkml]   [2018]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 15/17] perf report: Fix switching to another perf.data file
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    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>
    ---
    tools/perf/util/symbol.c | 8 +++-----
    1 file changed, 3 insertions(+), 5 deletions(-)

    diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
    index 62b2dd2253eb..1466814ebada 100644
    --- a/tools/perf/util/symbol.c
    +++ b/tools/perf/util/symbol.c
    @@ -2091,16 +2091,14 @@ static bool symbol__read_kptr_restrict(void)

    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;
    --
    2.14.3
    \
     
     \ /
      Last update: 2018-04-13 16:03    [W:5.857 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site