lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 222/293] perf callchain: Fix attr.sample_max_stack setting
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    [ Upstream commit 249d98e567e25dd03e015e2d31e1b7b9648f34df ]

    When setting the "dwarf" unwinder for a specific event and not
    specifying the max-stack, the attr.sample_max_stack ended up using an
    uninitialized callchain_param.max_stack, fix it by using designated
    initializers for that callchain_param variable, zeroing all non
    explicitely initialized struct members.

    Here is what happened:

    # perf trace -vv --no-syscalls --max-stack 4 -e probe_libc:inet_pton/call-graph=dwarf/ ping -6 -c 1 ::1
    callchain: type DWARF
    callchain: stack dump size 8192
    perf_event_attr:
    type 2
    size 112
    config 0x730
    { sample_period, sample_freq } 1
    sample_type IP|TID|TIME|ADDR|CALLCHAIN|CPU|PERIOD|RAW|REGS_USER|STACK_USER|DATA_SRC
    exclude_callchain_user 1
    { wakeup_events, wakeup_watermark } 1
    sample_regs_user 0xff0fff
    sample_stack_user 8192
    sample_max_stack 50656
    sys_perf_event_open failed, error -75
    Value too large for defined data type
    # perf trace -vv --no-syscalls --max-stack 4 -e probe_libc:inet_pton/call-graph=dwarf/ ping -6 -c 1 ::1
    callchain: type DWARF
    callchain: stack dump size 8192
    perf_event_attr:
    type 2
    size 112
    config 0x730
    sample_type IP|TID|TIME|ADDR|CALLCHAIN|CPU|PERIOD|RAW|REGS_USER|STACK_USER|DATA_SRC
    exclude_callchain_user 1
    sample_regs_user 0xff0fff
    sample_stack_user 8192
    sample_max_stack 30448
    sys_perf_event_open failed, error -75
    Value too large for defined data type
    #

    Now the attr.sample_max_stack is set to zero and the above works as
    expected:

    # perf trace --no-syscalls --max-stack 4 -e probe_libc:inet_pton/call-graph=dwarf/ ping -6 -c 1 ::1
    PING ::1(::1) 56 data bytes
    64 bytes from ::1: icmp_seq=1 ttl=64 time=0.072 ms

    --- ::1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.072/0.072/0.072/0.000 ms
    0.000 probe_libc:inet_pton:(7feb7a998350))
    __inet_pton (inlined)
    gaih_inet.constprop.7 (/usr/lib64/libc-2.26.so)
    __GI_getaddrinfo (inlined)
    [0xffffaa39b6108f3f] (/usr/bin/ping)
    #

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Hendrick Brueckner <brueckner@linux.vnet.ibm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: https://lkml.kernel.org/n/tip-is9tramondqa9jlxxsgcm9iz@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    tools/perf/util/evsel.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index 1c1291afd6a6..4b52c76fb2a8 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -694,14 +694,14 @@ static void apply_config_terms(struct perf_evsel *evsel,
    struct perf_evsel_config_term *term;
    struct list_head *config_terms = &evsel->config_terms;
    struct perf_event_attr *attr = &evsel->attr;
    - struct callchain_param param;
    + /* callgraph default */
    + struct callchain_param param = {
    + .record_mode = callchain_param.record_mode,
    + };
    u32 dump_size = 0;
    int max_stack = 0;
    const char *callgraph_buf = NULL;

    - /* callgraph default */
    - param.record_mode = callchain_param.record_mode;
    -
    list_for_each_entry(term, config_terms, list) {
    switch (term->type) {
    case PERF_EVSEL__CONFIG_TERM_PERIOD:
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 03:57    [W:5.575 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site