17 Apr, 2019

1 commit

  • [ Upstream commit fae2708174ae95d98d19f194e03d6e8f688ae195 ]

    the control path of 'sample' action does not validate the value of 'rate'
    provided by the user, but then it uses it as divisor in the traffic path.
    Validate it in tcf_sample_init(), and return -EINVAL with a proper extack
    message in case that value is zero, to fix a splat with the script below:

    # tc f a dev test0 egress matchall action sample rate 0 group 1 index 2
    # tc -s a s action sample
    total acts 1

    action order 0: sample rate 1/0 group 1 pipe
    index 2 ref 1 bind 1 installed 19 sec used 19 sec
    Action statistics:
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
    backlog 0b 0p requeues 0
    # ping 192.0.2.1 -I test0 -c1 -q

    divide error: 0000 [#1] SMP PTI
    CPU: 1 PID: 6192 Comm: ping Not tainted 5.1.0-rc2.diag2+ #591
    Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
    RIP: 0010:tcf_sample_act+0x9e/0x1e0 [act_sample]
    Code: 6a f1 85 c0 74 0d 80 3d 83 1a 00 00 00 0f 84 9c 00 00 00 4d 85 e4 0f 84 85 00 00 00 e8 9b d7 9c f1 44 8b 8b e0 00 00 00 31 d2 f7 f1 85 d2 75 70 f6 85 83 00 00 00 10 48 8b 45 10 8b 88 08 01
    RSP: 0018:ffffae320190ba30 EFLAGS: 00010246
    RAX: 00000000b0677d21 RBX: ffff8af1ed9ec000 RCX: 0000000059a9fe49
    RDX: 0000000000000000 RSI: 000000000c7e33b7 RDI: ffff8af23daa0af0
    RBP: ffff8af1ee11b200 R08: 0000000074fcaf7e R09: 0000000000000000
    R10: 0000000000000050 R11: ffffffffb3088680 R12: ffff8af232307f80
    R13: 0000000000000003 R14: ffff8af1ed9ec000 R15: 0000000000000000
    FS: 00007fe9c6d2f740(0000) GS:ffff8af23da80000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fff6772f000 CR3: 00000000746a2004 CR4: 00000000001606e0
    Call Trace:
    tcf_action_exec+0x7c/0x1c0
    tcf_classify+0x57/0x160
    __dev_queue_xmit+0x3dc/0xd10
    ip_finish_output2+0x257/0x6d0
    ip_output+0x75/0x280
    ip_send_skb+0x15/0x40
    raw_sendmsg+0xae3/0x1410
    sock_sendmsg+0x36/0x40
    __sys_sendto+0x10e/0x140
    __x64_sys_sendto+0x24/0x30
    do_syscall_64+0x60/0x210
    entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [...]
    Kernel panic - not syncing: Fatal exception in interrupt

    Add a TDC selftest to document that 'rate' is now being validated.

    Reported-by: Matteo Croce
    Fixes: 5c5670fae430 ("net/sched: Introduce sample tc action")
    Signed-off-by: Davide Caratti
    Acked-by: Yotam Gigi
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin

    Davide Caratti
     

06 Apr, 2019

11 commits

  • [ Upstream commit cc437642255224e4140fed1f3e3156fc8ad91903 ]

    In Python3, the result of PyModule_Create (called from
    scripts/python/Perf-Trace-Util/Context.c) is not automatically added to
    sys.modules. See: https://bugs.python.org/issue4592

    Below is the observed behavior without the fix:

    # ldd /usr/bin/perf | grep -i python
    libpython3.6m.so.1.0 => /usr/lib64/libpython3.6m.so.1.0 (0x00007f8e1dfb2000)

    # perf record /bin/false
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.015 MB perf.data (17 samples) ]

    # perf script -g python | cat
    generated Python script: perf-script.py

    # perf script -s ./perf-script.py
    Traceback (most recent call last):
    File "./perf-script.py", line 18, in
    from perf_trace_context import *
    ModuleNotFoundError: No module named 'perf_trace_context'
    Error running python script ./perf-script.py
    #

    Committer notes:

    To build with python3 use:

    $ make -C tools/perf PYTHON=python3

    Use a non-const variable to pass the 'name' arg to
    PyImport_AppendInittab(), as python2.6 has that as 'char *', which ends
    up trowing this in some environments:

    CC /tmp/build/perf/util/parse-branch-options.o
    util/scripting-engines/trace-event-python.c: In function 'python_start_script':
    util/scripting-engines/trace-event-python.c:1520:2: error: passing argument 1 of 'PyImport_AppendInittab' discards 'const' qualifier from pointer target type [-Werror]
    PyImport_AppendInittab("perf_trace_context", initfunc);
    ^
    In file included from /usr/include/python2.6/Python.h:130:0,
    from util/scripting-engines/trace-event-python.c:22:
    /usr/include/python2.6/import.h:54:17: note: expected 'char *' but argument is of type 'const char *'
    PyAPI_FUNC(int) PyImport_AppendInittab(char *name, void (*initfunc)(void));
    ^
    cc1: all warnings being treated as errors

    Signed-off-by: Tony Jones
    Acked-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Jaroslav Škarvada
    Cc: Jonathan Corbet
    Cc: Ravi Bangoria
    Cc: Seeteena Thoufeek
    Fixes: 66dfdff03d19 ("perf tools: Add Python 3 support")
    Link: http://lkml.kernel.org/r/20190124005229.16146-2-tonyj@suse.de
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Tony Jones
     
  • [ Upstream commit 72e0b15cb24a497d7d0d4707cf51ff40c185ae8c ]

    With Python3. PyUnicode_FromStringAndSize is unsafe to call on attr and will
    return NULL. Use _PyBytes_FromStringAndSize (as with raw_buf).

    Below is the observed behavior without the fix. Note it is first necessary
    to apply the prior fix (Add trace_context extension module to sys,modules):

    # ldd /usr/bin/perf | grep -i python
    libpython3.6m.so.1.0 => /usr/lib64/libpython3.6m.so.1.0 (0x00007f8e1dfb2000)

    # perf record -e raw_syscalls:sys_enter /bin/false
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.018 MB perf.data (21 samples) ]

    # perf script -g python | cat
    generated Python script: perf-script.py

    # perf script -s ./perf-script.py
    in trace_begin
    Segmentation fault (core dumped)

    Signed-off-by: Tony Jones
    Acked-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Jaroslav Škarvada
    Cc: Jonathan Corbet
    Cc: Ravi Bangoria
    Cc: Seeteena Thoufeek
    Fixes: 66dfdff03d19 ("perf tools: Add Python 3 support")
    Link: http://lkml.kernel.org/r/20190124005229.16146-3-tonyj@suse.de
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Tony Jones
     
  • [ Upstream commit 8184d44c9a577a2f1842ed6cc844bfd4a9981d8e ]

    Use recently introduced bpf_probe_prog_type() to skip tests in the
    test_verifier() if bpf_verify_program() fails. The skipped test is
    indicated in the output.

    Example:

    ...
    679/p bpf_get_stack return R0 within range SKIP (unsupported program
    type 5)
    680/p ld_abs: invalid op 1 OK
    ...
    Summary: 863 PASSED, 165 SKIPPED, 3 FAILED

    Signed-off-by: Stanislav Fomichev
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Stanislav Fomichev
     
  • [ Upstream commit 3aa415dd2128e478ea3225b59308766de0e94d6b ]

    The get_metadata() test requires real root, so let's skip it if we're not
    real root.

    Note that I used XFAIL here because that's what the test does later if
    CONFIG_CHEKCKPOINT_RESTORE happens to not be enabled. After looking at the
    code, there doesn't seem to be a nice way to skip tests defined as TEST(),
    since there's no return code (I tried exit(KSFT_SKIP), but that didn't work
    either...). So let's do it this way to be consistent, and easier to fix
    when someone comes along and fixes it.

    Signed-off-by: Tycho Andersen
    Acked-by: Kees Cook
    Signed-off-by: Shuah Khan
    Signed-off-by: Sasha Levin

    Tycho Andersen
     
  • [ Upstream commit 2187d87eacd46f6214ce3dc9cfd7a558375a4153 ]

    On IBM z13 machine types 2964 and 2965 the descriptor
    sizes for sampling and diagnostic sampling entries
    might be missing in the trailer entry and are set to zero.

    This leads to a perf report failure when processing diagnostic
    sampling entries.

    This patch adds missing descriptor sizes when the trailer entry
    contains zero for these fields.

    Output before:
    [root@s38lp82 perf]# ./perf report --stdio | fgrep Samples
    0xabbf0 [0x8]: failed to process type: 68
    Error:
    failed to process sample
    [root@s38lp82 perf]#

    Output after:
    [root@s38lp82 perf]# ./perf report --stdio | fgrep Samples
    # Total Lost Samples: 0
    # Samples: 3K of event 'SF_CYCLES_BASIC_DIAG'
    # Samples: 162 of event 'CF_DIAG'
    [root@s38lp82 perf]#

    Fixes: 2b1444f2e28b ("perf report: Add raw report support for s390 auxiliary trace")

    Signed-off-by: Thomas Richter
    Reviewed-by: Hendrik Brueckner
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Link: http://lkml.kernel.org/r/20190211100627.85714-1-tmricht@linux.ibm.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Thomas Richter
     
  • [ Upstream commit 7346195e8643482968f547483e0d823ec1982fab ]

    We can't assume inlined symbols with the same name are equal, because
    their address range may be different. This will cause the symbols with
    different addresses be shadowed when adding to the hist entry, and lead
    to ERANGE error when checking the symbol address during sample parse,
    the addr should be within the range of [sym.start, sym.end].

    The error message is like: "0x36aea60 [0x8]: failed to process type: 68".

    The second parameter of symbol__new() is the length of the fake symbol
    for the inline frame, which is the subtraction of the end and start
    address of base_sym.

    Signed-off-by: He Kuang
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Milian Wolff
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Fixes: aa441895f7b4 ("perf report: Compare symbol name for inlined frames when sorting")
    Link: http://lkml.kernel.org/r/20190219130531.15692-1-hekuang@huawei.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    He Kuang
     
  • [ Upstream commit 03d309711d687460d1345de8a0363f45b1c8cd11 ]

    Commit 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator")
    causes test case 14 "Parse sched tracepoints fields" to fail on s390.

    This test succeeds on x86.

    In fact this test now fails on all architectures with type char treated
    as type unsigned char.

    The root cause is the signed-ness of character arrays in the tracepoints
    sched_switch for structure members prev_comm and next_comm.

    On s390 the output of:

    [root@m35lp76 perf]# cat /sys/kernel/debug/tracing/events/sched/sched_switch/format
    name: sched_switch
    ID: 287
    format:
    field:unsigned short common_type; offset:0; size:2; signed:0;
    ...
    field:char prev_comm[16]; offset:8; size:16; signed:0;
    ...
    field:char next_comm[16]; offset:40; size:16; signed:0;

    reveals the character arrays prev_comm and next_comm are per
    default unsigned char and have values in the range of 0..255.

    On x86 both fields are signed as this output shows:
    [root@f29]# cat /sys/kernel/debug/tracing/events/sched/sched_switch/format
    name: sched_switch
    ID: 287
    format:
    field:unsigned short common_type; offset:0; size:2; signed:0;
    ...
    field:char prev_comm[16]; offset:8; size:16; signed:1;
    ...
    field:char next_comm[16]; offset:40; size:16; signed:1;

    and the character arrays prev_comm and next_comm are per default signed
    char and have values in the range of -1..127. The implementation of
    type char is architecture specific.

    Since the character arrays in both tracepoints sched_switch and
    sched_wakeup should contain ascii characters, simply omit the check for
    signedness in the test case.

    Output before:

    [root@m35lp76 perf]# ./perf test -F 14
    14: Parse sched tracepoints fields :
    --- start ---
    sched:sched_switch: "prev_comm" signedness(0) is wrong, should be 1
    sched:sched_switch: "next_comm" signedness(0) is wrong, should be 1
    sched:sched_wakeup: "comm" signedness(0) is wrong, should be 1
    ---- end ----
    14: Parse sched tracepoints fields : FAILED!
    [root@m35lp76 perf]#

    Output after:

    [root@m35lp76 perf]# ./perf test -Fv 14
    14: Parse sched tracepoints fields :
    --- start ---
    ---- end ----
    Parse sched tracepoints fields: Ok
    [root@m35lp76 perf]#

    Fixes: 489338a717a0 ("perf tests evsel-tp-sched: Fix bitwise operator")

    Signed-off-by: Thomas Richter
    Cc: Heiko Carstens
    Cc: Hendrik Brueckner
    Cc: Martin Schwidefsky
    Link: http://lkml.kernel.org/r/20190219153639.31267-1-tmricht@linux.ibm.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Thomas Richter
     
  • [ Upstream commit 11db1ad4513d6205d2519e1a30ff4cef746e3243 ]

    The output of "perf annotate -l --stdio xxx" changed since commit 425859ff0de33
    ("perf annotate: No need to calculate notes->start twice") removed notes->start
    assignment in symbol__calc_lines(). It will get failed in
    find_address_in_section() from symbol__tty_annotate() subroutine as the
    a2l->addr is wrong. So the annotate summary doesn't report the line number of
    source code correctly.

    Before fix:

    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ cat common_while_1.c
    void hotspot_1(void)
    {
    volatile int i;

    for (i = 0; i < 0x10000000; i++);
    for (i = 0; i < 0x10000000; i++);
    for (i = 0; i < 0x10000000; i++);
    }

    int main(void)
    {
    hotspot_1();

    return 0;
    }
    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ gcc common_while_1.c -g -o common_while_1

    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ sudo ./perf record ./common_while_1
    [ perf record: Woken up 2 times to write data ]
    [ perf record: Captured and wrote 0.488 MB perf.data (12498 samples) ]
    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ sudo ./perf annotate -l -s hotspot_1 --stdio

    Sorted summary for file /home/liwei/main_code/hulk_work/hulk/tools/perf/common_while_1
    ----------------------------------------------

    19.30 common_while_1[32]
    19.03 common_while_1[4e]
    19.01 common_while_1[16]
    5.04 common_while_1[13]
    4.99 common_while_1[4b]
    4.78 common_while_1[2c]
    4.77 common_while_1[10]
    4.66 common_while_1[2f]
    4.59 common_while_1[51]
    4.59 common_while_1[35]
    4.52 common_while_1[19]
    4.20 common_while_1[56]
    0.51 common_while_1[48]
    Percent | Source code & Disassembly of common_while_1 for cycles:ppp (12480 samples, percent: local period)
    -----------------------------------------------------------------------------------------------------------------
    :
    :
    :
    : Disassembly of section .text:
    :
    : 00000000000005fa :
    : hotspot_1():
    : void hotspot_1(void)
    : {
    0.00 : 5fa: push %rbp
    0.00 : 5fb: mov %rsp,%rbp
    : volatile int i;
    :
    : for (i = 0; i < 0x10000000; i++);
    0.00 : 5fe: movl $0x0,-0x4(%rbp)
    0.00 : 605: jmp 610
    0.00 : 607: mov -0x4(%rbp),%eax
    common_while_1[10] 4.77 : 60a: add $0x1,%eax
    common_while_1[13] 5.04 : 60d: mov %eax,-0x4(%rbp)
    common_while_1[16] 19.01 : 610: mov -0x4(%rbp),%eax
    common_while_1[19] 4.52 : 613: cmp $0xfffffff,%eax
    0.00 : 618: jle 607
    : for (i = 0; i < 0x10000000; i++);
    ...

    After fix:

    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ sudo ./perf record ./common_while_1
    [ perf record: Woken up 2 times to write data ]
    [ perf record: Captured and wrote 0.488 MB perf.data (12500 samples) ]
    liwei@euler:~/main_code/hulk_work/hulk/tools/perf$ sudo ./perf annotate -l -s hotspot_1 --stdio

    Sorted summary for file /home/liwei/main_code/hulk_work/hulk/tools/perf/common_while_1
    ----------------------------------------------

    33.34 common_while_1.c:5
    33.34 common_while_1.c:6
    33.32 common_while_1.c:7
    Percent | Source code & Disassembly of common_while_1 for cycles:ppp (12482 samples, percent: local period)
    -----------------------------------------------------------------------------------------------------------------
    :
    :
    :
    : Disassembly of section .text:
    :
    : 00000000000005fa :
    : hotspot_1():
    : void hotspot_1(void)
    : {
    0.00 : 5fa: push %rbp
    0.00 : 5fb: mov %rsp,%rbp
    : volatile int i;
    :
    : for (i = 0; i < 0x10000000; i++);
    0.00 : 5fe: movl $0x0,-0x4(%rbp)
    0.00 : 605: jmp 610
    0.00 : 607: mov -0x4(%rbp),%eax
    common_while_1.c:5 4.70 : 60a: add $0x1,%eax
    4.89 : 60d: mov %eax,-0x4(%rbp)
    common_while_1.c:5 19.03 : 610: mov -0x4(%rbp),%eax
    common_while_1.c:5 4.72 : 613: cmp $0xfffffff,%eax
    0.00 : 618: jle 607
    : for (i = 0; i < 0x10000000; i++);
    0.00 : 61a: movl $0x0,-0x4(%rbp)
    0.00 : 621: jmp 62c
    0.00 : 623: mov -0x4(%rbp),%eax
    common_while_1.c:6 4.54 : 626: add $0x1,%eax
    4.73 : 629: mov %eax,-0x4(%rbp)
    common_while_1.c:6 19.54 : 62c: mov -0x4(%rbp),%eax
    common_while_1.c:6 4.54 : 62f: cmp $0xfffffff,%eax
    ...

    Signed-off-by: Wei Li
    Acked-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Alexander Shishkin
    Cc: Jin Yao
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Fixes: 425859ff0de33 ("perf annotate: No need to calculate notes->start twice")
    Link: http://lkml.kernel.org/r/20190221095716.39529-1-liwei391@huawei.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Wei Li
     
  • [ Upstream commit 7c5b019e3a638a5a290b0ec020f6ca83d2ec2aaa ]

    Fix buffer overflow observed when running perf test.

    The overflow is when trying to evaluate "1ULL << (64 - 1)" which is
    resulting in -9223372036854775808 which overflows the 20 character
    buffer.

    If is possible this bug has been reported before but I still don't see
    any fix checked in:

    See: https://www.spinics.net/lists/linux-perf-users/msg07714.html

    Reported-by: Michael Sartain
    Reported-by: Mathias Krause
    Signed-off-by: Tony Jones
    Acked-by: Steven Rostedt (VMware)
    Cc: Frederic Weisbecker
    Fixes: f7d82350e597 ("tools/events: Add files to create libtraceevent.a")
    Link: http://lkml.kernel.org/r/20190228015532.8941-1-tonyj@suse.de
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Tony Jones
     
  • [ Upstream commit e34c940245437f36d2c492edd1f8237eff391064 ]

    Ravi Bangoria reported that we fail with an empty NUMA node with the
    following message:

    $ lscpu
    NUMA node0 CPU(s):
    NUMA node1 CPU(s): 0-4

    $ sudo ./perf c2c report
    node/cpu topology bugFailed setup nodes

    Fix this by detecting the empty node and keeping its CPU set empty.

    Reported-by: Nageswara R Sastry
    Signed-off-by: Jiri Olsa
    Tested-by: Ravi Bangoria
    Cc: Alexander Shishkin
    Cc: Andi Kleen
    Cc: Jonas Rabenstein
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20190305152536.21035-2-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Jiri Olsa
     
  • [ Upstream commit 8e2688876c7f7073d925e1f150e86b8ed3338f52 ]

    libbpf targets don't explicitly depend on fixdep target, so when
    we do 'make -j$(nproc)', there is a high probability, that some
    objects will be built before fixdep binary is available.

    Fix this by running sub-make; this makes sure that fixdep dependency
    is properly accounted for.

    For the same issue in perf, see commit abb26210a395 ("perf tools: Force
    fixdep compilation at the start of the build").

    Before:

    $ rm -rf /tmp/bld; mkdir /tmp/bld; make -j$(nproc) O=/tmp/bld -C tools/lib/bpf/

    Auto-detecting system features:
    ... libelf: [ on ]
    ... bpf: [ on ]

    HOSTCC /tmp/bld/fixdep.o
    CC /tmp/bld/libbpf.o
    CC /tmp/bld/bpf.o
    CC /tmp/bld/btf.o
    CC /tmp/bld/nlattr.o
    CC /tmp/bld/libbpf_errno.o
    CC /tmp/bld/str_error.o
    CC /tmp/bld/netlink.o
    CC /tmp/bld/bpf_prog_linfo.o
    CC /tmp/bld/libbpf_probes.o
    CC /tmp/bld/xsk.o
    HOSTLD /tmp/bld/fixdep-in.o
    LINK /tmp/bld/fixdep
    LD /tmp/bld/libbpf-in.o
    LINK /tmp/bld/libbpf.a
    LINK /tmp/bld/libbpf.so
    LINK /tmp/bld/test_libbpf

    $ head /tmp/bld/.libbpf.o.cmd
    # cannot find fixdep (/usr/local/google/home/sdf/src/linux/xxx//fixdep)
    # using basic dep data

    /tmp/bld/libbpf.o: libbpf.c /usr/include/stdc-predef.h \
    /usr/include/stdlib.h /usr/include/features.h \
    /usr/include/x86_64-linux-gnu/sys/cdefs.h \
    /usr/include/x86_64-linux-gnu/bits/wordsize.h \
    /usr/include/x86_64-linux-gnu/gnu/stubs.h \
    /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
    /usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h \

    After:

    $ rm -rf /tmp/bld; mkdir /tmp/bld; make -j$(nproc) O=/tmp/bld -C tools/lib/bpf/

    Auto-detecting system features:
    ... libelf: [ on ]
    ... bpf: [ on ]

    HOSTCC /tmp/bld/fixdep.o
    HOSTLD /tmp/bld/fixdep-in.o
    LINK /tmp/bld/fixdep
    CC /tmp/bld/libbpf.o
    CC /tmp/bld/bpf.o
    CC /tmp/bld/nlattr.o
    CC /tmp/bld/btf.o
    CC /tmp/bld/libbpf_errno.o
    CC /tmp/bld/str_error.o
    CC /tmp/bld/netlink.o
    CC /tmp/bld/bpf_prog_linfo.o
    CC /tmp/bld/libbpf_probes.o
    CC /tmp/bld/xsk.o
    LD /tmp/bld/libbpf-in.o
    LINK /tmp/bld/libbpf.a
    LINK /tmp/bld/libbpf.so
    LINK /tmp/bld/test_libbpf

    $ head /tmp/bld/.libbpf.o.cmd
    cmd_/tmp/bld/libbpf.o := gcc -Wp,-MD,/tmp/bld/.libbpf.o.d -Wp,-MT,/tmp/bld/libbpf.o -g -Wall -DHAVE_LIBELF_MMAP_SUPPORT -DCOMPAT_NEED_REALLOCARRAY -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wshadow -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wstrict-aliasing=3 -Werror -Wall -fPIC -I. -I/usr/local/google/home/sdf/src/linux/tools/include -I/usr/local/google/home/sdf/src/linux/tools/arch/x86/include/uapi -I/usr/local/google/home/sdf/src/linux/tools/include/uapi -fvisibility=hidden -D"BUILD_STR(s)=$(pound)s" -c -o /tmp/bld/libbpf.o libbpf.c

    source_/tmp/bld/libbpf.o := libbpf.c

    deps_/tmp/bld/libbpf.o := \
    /usr/include/stdc-predef.h \
    /usr/include/stdlib.h \
    /usr/include/features.h \
    /usr/include/x86_64-linux-gnu/sys/cdefs.h \
    /usr/include/x86_64-linux-gnu/bits/wordsize.h \

    Fixes: 7c422f557266 ("tools build: Build fixdep helper from perf and basic libs")
    Reported-by: Eric Dumazet
    Signed-off-by: Stanislav Fomichev
    Acked-by: Yonghong Song
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Stanislav Fomichev
     

03 Apr, 2019

3 commits

  • commit 056d28d135bca0b1d0908990338e00e9dadaf057 upstream.

    If it is not in the default location, compilation fails at several points.

    Signed-off-by: Rolf Eike Beer
    Signed-off-by: Josh Poimboeuf
    Signed-off-by: Thomas Gleixner
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/91a25e992566a7968fedc89ec80e7f4c83ad0548.1553622500.git.jpoimboe@redhat.com
    Signed-off-by: Greg Kroah-Hartman

    Rolf Eike Beer
     
  • commit f3b4e06b3bda759afd042d3d5fa86bea8f1fe278 upstream.

    A TSC packet can slip past MTC packets so that the timestamp appears to
    go backwards. One estimate is that can be up to about 40 CPU cycles,
    which is certainly less than 0x1000 TSC ticks, but accept slippage an
    order of magnitude more to be on the safe side.

    Signed-off-by: Adrian Hunter
    Cc: Jiri Olsa
    Cc: stable@vger.kernel.org
    Fixes: 79b58424b821c ("perf tools: Add Intel PT support for decoding MTC packets")
    Link: http://lkml.kernel.org/r/20190325135135.18348-1-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • commit e94d6b7f615e6dfbaf9fba7db6011db561461d0c upstream.

    Perf fails to parse uncore event alias, for example:

    # perf stat -e unc_m_clockticks -a --no-merge sleep 1
    event syntax error: 'unc_m_clockticks'
    \___ parser error

    Current code assumes that the event alias is from one specific PMU.

    To find the PMU, perf strcmps the PMU name of event alias with the real
    PMU name on the system.

    However, the uncore event alias may be from multiple PMUs with common
    prefix. The PMU name of uncore event alias is the common prefix.

    For example, UNC_M_CLOCKTICKS is clock event for iMC, which include 6
    PMUs with the same prefix "uncore_imc" on a skylake server.

    The real PMU names on the system for iMC are uncore_imc_0 ...
    uncore_imc_5.

    The strncmp is used to only check the common prefix for uncore event
    alias.

    With the patch:

    # perf stat -e unc_m_clockticks -a --no-merge sleep 1
    Performance counter stats for 'system wide':

    723,594,722 unc_m_clockticks [uncore_imc_5]
    724,001,954 unc_m_clockticks [uncore_imc_3]
    724,042,655 unc_m_clockticks [uncore_imc_1]
    724,161,001 unc_m_clockticks [uncore_imc_4]
    724,293,713 unc_m_clockticks [uncore_imc_2]
    724,340,901 unc_m_clockticks [uncore_imc_0]

    1.002090060 seconds time elapsed

    Signed-off-by: Kan Liang
    Acked-by: Jiri Olsa
    Cc: Andi Kleen
    Cc: Thomas Richter
    Cc: stable@vger.kernel.org
    Fixes: ea1fa48c055f ("perf stat: Handle different PMU names with common prefix")
    Link: http://lkml.kernel.org/r/1552672814-156173-1-git-send-email-kan.liang@linux.intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Kan Liang
     

27 Mar, 2019

2 commits

  • commit 0c671812f152b628bd87c0af49da032cc2a2c319 upstream.

    Objtool uses over 512k of stack, thanks to the hash table embedded in
    the objtool_file struct. This causes an unnecessarily large stack
    allocation and breaks users with low stack limits.

    Move the struct off the stack.

    Fixes: 042ba73fe7eb ("objtool: Add several performance improvements")
    Reported-by: Vassili Karpov
    Signed-off-by: Josh Poimboeuf
    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/df92dcbc4b84b02ffa252f46876df125fb56e2d7.1552954176.git.jpoimboe@redhat.com
    Signed-off-by: Greg Kroah-Hartman

    Josh Poimboeuf
     
  • commit eaeffeb9838a7c0dec981d258666bfcc0fa6a947 upstream.

    Since commit 4d99e4136580 ("perf machine: Workaround missing maps for
    x86 PTI entry trampolines"), perf tools has been creating more than one
    kernel map, however 'perf probe' assumed there could be only one.

    Fix by using machine__kernel_map() to get the main kernel map.

    Signed-off-by: Adrian Hunter
    Tested-by: Joseph Qi
    Acked-by: Masami Hiramatsu
    Cc: Alexander Shishkin
    Cc: Andy Lutomirski
    Cc: Greg Kroah-Hartman
    Cc: Jiufei Xue
    Cc: Peter Zijlstra
    Cc: stable@vger.kernel.org
    Cc: Xu Yu
    Fixes: 4d99e4136580 ("perf machine: Workaround missing maps for x86 PTI entry trampolines")
    Fixes: d83212d5dd67 ("kallsyms, x86: Export addresses of PTI entry trampolines")
    Link: http://lkml.kernel.org/r/2ed432de-e904-85d2-5c36-5897ddc5b23b@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     

24 Mar, 2019

7 commits

  • commit 076333870c2f5bdd9b6d31e7ca1909cf0c84cbfa upstream.

    When TSC is not available, "timeless" decoding is used but a divide by
    zero occurs if perf_time_to_tsc() is called.

    Ensure the divisor is not zero.

    Signed-off-by: Adrian Hunter
    Cc: Jiri Olsa
    Cc: stable@vger.kernel.org # v4.9+
    Link: https://lkml.kernel.org/n/tip-1i4j0wqoc8vlbkcizqqxpsf4@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • commit 5a99d99e3310a565b0cf63f785b347be9ee0da45 upstream.

    Auxtrace records might have up to 7 bytes of padding appended. Adjust
    the overlap accordingly.

    Signed-off-by: Adrian Hunter
    Cc: Jiri Olsa
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20190206103947.15750-3-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • commit c3fcadf0bb765faf45d6d562246e1d08885466df upstream.

    Define auxtrace record alignment so that it can be referenced elsewhere.

    Note this is preparation for patch "perf intel-pt: Fix overlap calculation
    for padding"

    Signed-off-by: Adrian Hunter
    Cc: Jiri Olsa
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20190206103947.15750-2-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • commit d6d457451eb94fa747dc202765592eb8885a7352 upstream.

    Kallsyms symbols do not have a size, so the size becomes the distance to
    the next symbol.

    Consequently the recently added trampoline symbols end up with large
    sizes because the trampolines are some distance from one another and the
    main kernel map.

    However, symbols that end outside their map can disrupt the symbol tree
    because, after mapping, it can appear incorrectly that they overlap
    other symbols.

    Add logic to truncate symbol size to the end of the corresponding map.

    Signed-off-by: Adrian Hunter
    Acked-by: Jiri Olsa
    Cc: stable@vger.kernel.org
    Fixes: d83212d5dd67 ("kallsyms, x86: Export addresses of PTI entry trampolines")
    Link: http://lkml.kernel.org/r/20190109091835.5570-2-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • commit 03997612904866abe7cdcc992784ef65cb3a4b81 upstream.

    CYC packet timestamp calculation depends upon CBR which was being
    cleared upon overflow (OVF). That can cause errors due to failing to
    synchronize with sideband events. Even if a CBR change has been lost,
    the old CBR is still a better estimate than zero. So remove the clearing
    of CBR.

    Signed-off-by: Adrian Hunter
    Cc: Jiri Olsa
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20190206103947.15750-4-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Greg Kroah-Hartman

    Adrian Hunter
     
  • [ Upstream commit af548a27b158d548d41e56255e6eaca1658cc3be ]

    Just like commit e2ba732a1681 ("selftests: fib_tests: sleep after
    changing carrier"), wait one second to allow linkwatch to propagate the
    carrier change to the stack.

    There are two sets of carrier tests. The first slept after the carrier
    was set to off, and when the second set ran, it was likely that the
    linkwatch would be able to run again without much delay, reducing the
    likelihood of a race. However, if you run 'fib_tests.sh -t carrier' on a
    loop, you will quickly notice the failures.

    Sleeping on the second set of tests make the failures go away.

    Cc: David Ahern
    Signed-off-by: Thadeu Lima de Souza Cascardo
    Reviewed-by: David Ahern
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin

    Thadeu Lima de Souza Cascardo
     
  • [ Upstream commit 7c0cdf0b3940f63d9777c3fcf250a2f83859ca54 ]

    trie_delete_elem() was deleting an entry even though it was not matching
    if the prefixlen was correct. This patch adds a check on matchlen.

    Reproducer:

    $ sudo bpftool map create /sys/fs/bpf/mylpm type lpm_trie key 8 value 1 entries 128 name mylpm flags 1
    $ sudo bpftool map update pinned /sys/fs/bpf/mylpm key hex 10 00 00 00 aa bb cc dd value hex 01
    $ sudo bpftool map dump pinned /sys/fs/bpf/mylpm
    key: 10 00 00 00 aa bb cc dd value: 01
    Found 1 element
    $ sudo bpftool map delete pinned /sys/fs/bpf/mylpm key hex 10 00 00 00 ff ff ff ff
    $ echo $?
    0
    $ sudo bpftool map dump pinned /sys/fs/bpf/mylpm
    Found 0 elements

    A similar reproducer is added in the selftests.

    Without the patch:

    $ sudo ./tools/testing/selftests/bpf/test_lpm_map
    test_lpm_map: test_lpm_map.c:485: test_lpm_delete: Assertion `bpf_map_delete_elem(map_fd, key) == -1 && errno == ENOENT' failed.
    Aborted

    With the patch: test_lpm_map runs without errors.

    Fixes: e454cf595853 ("bpf: Implement map_delete_elem for BPF_MAP_TYPE_LPM_TRIE")
    Cc: Craig Gallek
    Signed-off-by: Alban Crequy
    Acked-by: Craig Gallek
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Alban Crequy
     

14 Mar, 2019

14 commits

  • [ Upstream commit 6ab3bc240ade47a0f52bc16d97edd9accbe0024e ]

    With a suitably defined "probe:vfs_getname" probe, 'perf trace' can
    "beautify" its output, so syscalls like open() or openat() can print the
    "filename" argument instead of just its hex address, like:

    $ perf trace -e open -- touch /dev/null
    [...]
    0.590 ( 0.014 ms): touch/18063 open(filename: /dev/null, flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3
    [...]

    The output without such beautifier looks like:

    0.529 ( 0.011 ms): touch/18075 open(filename: 0xc78cf288, flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3

    However, when the vfs_getname probe expands to multiple probes and it is
    not the first one that is hit, the beautifier fails, as following:

    0.326 ( 0.010 ms): touch/18072 open(filename: , flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3

    Fix it by hooking into all the expanded probes (inlines), now, for instance:

    [root@quaco ~]# perf probe -l
    probe:vfs_getname (on getname_flags:73@fs/namei.c with pathname)
    probe:vfs_getname_1 (on getname_flags:73@fs/namei.c with pathname)
    [root@quaco ~]# perf trace -e open* sleep 1
    0.010 ( 0.005 ms): sleep/5588 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: RDONLY|CLOEXEC) = 3
    0.029 ( 0.006 ms): sleep/5588 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: RDONLY|CLOEXEC) = 3
    0.194 ( 0.008 ms): sleep/5588 openat(dfd: CWD, filename: /usr/lib/locale/locale-archive, flags: RDONLY|CLOEXEC) = 3
    [root@quaco ~]#

    Works, further verified with:

    [root@quaco ~]# perf test vfs
    65: Use vfs_getname probe to get syscall args filenames : Ok
    66: Add vfs_getname probe to get syscall args filenames : Ok
    67: Check open filename arg using perf trace + vfs_getname: Ok
    [root@quaco ~]#

    Reported-by: Michael Petlan
    Tested-by: Michael Petlan
    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-mv8kolk17xla1smvmp3qabv1@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Arnaldo Carvalho de Melo
     
  • [ Upstream commit 59a17706915fe5ea6f711e1f92d4fb706bce07fe ]

    When perf is built with the annobin plugin (RHEL8 build) extra symbols
    are added to its binary:

    # nm perf | grep annobin | head -10
    0000000000241100 t .annobin_annotate.c
    0000000000326490 t .annobin_annotate.c
    0000000000249255 t .annobin_annotate.c_end
    00000000003283a8 t .annobin_annotate.c_end
    00000000001bce18 t .annobin_annotate.c_end.hot
    00000000001bce18 t .annobin_annotate.c_end.hot
    00000000001bc3e2 t .annobin_annotate.c_end.unlikely
    00000000001bc400 t .annobin_annotate.c_end.unlikely
    00000000001bce18 t .annobin_annotate.c.hot
    00000000001bce18 t .annobin_annotate.c.hot
    ...

    Those symbols have no use for report or annotation and should be
    skipped. Moreover they interfere with the DWARF unwind test on the PPC
    arch, where they are mixed with checked symbols and then the test fails:

    # perf test dwarf -v
    59: Test dwarf unwind :
    --- start ---
    test child forked, pid 8515
    unwind: .annobin_dwarf_unwind.c:ip = 0x10dba40dc (0x2740dc)
    ...
    got: .annobin_dwarf_unwind.c 0x10dba40dc, expecting test__arch_unwind_sample
    unwind: failed with 'no error'

    The annobin symbols are defined as NOTYPE/LOCAL/HIDDEN:

    # readelf -s ./perf | grep annobin | head -1
    40: 00000000001bce4f 0 NOTYPE LOCAL HIDDEN 13 .annobin_init.c

    They can still pass the check for the label symbol. Adding check for
    HIDDEN and INTERNAL (as suggested by Nick below) visibility and filter
    out such symbols.

    > Just to be awkward, if you are going to ignore STV_HIDDEN
    > symbols then you should probably also ignore STV_INTERNAL ones
    > as well... Annobin does not generate them, but you never know,
    > one day some other tool might create some.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Masami Hiramatsu
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Nick Clifton
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20190128133526.GD15461@krava
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Jiri Olsa
     
  • [ Upstream commit 98bfc3414bda335dbd7fec58bde6266f991801d7 ]

    Check basic nat/redirect/masquerade for ipv4 and ipv6.

    Signed-off-by: Florian Westphal
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: Sasha Levin

    Florian Westphal
     
  • [ Upstream commit 952b72f89ae23b316da8c1021b18d0c388ad6cc4 ]

    In selftests the config fragment for netfilter was added as
    NF_TABLES_INET=y and this patch correct it as CONFIG_NF_TABLES_INET=y

    Signed-off-by: Naresh Kamboju
    Acked-by: Florian Westphal
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: Sasha Levin

    Naresh Kamboju
     
  • [ Upstream commit 1bb54c4071f585ebef56ce8fdfe6026fa2cbcddd ]

    Previously, bpf_num_possible_cpus() had a bug when calculating a
    number of possible CPUs in the case of sparse CPU allocations, as
    it was considering only the first range or element of
    /sys/devices/system/cpu/possible.

    E.g. in the case of "0,2-3" (CPU 1 is not available), the function
    returned 1 instead of 3.

    This patch fixes the function by making it parse all CPU ranges and
    elements.

    Signed-off-by: Martynas Pumputis
    Acked-by: Yonghong Song
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Martynas Pumputis
     
  • [ Upstream commit b0ca5ecb8e2279d706261f525f1bd0ba9e3fe800 ]

    When updating a percpu map, bpftool currently copies the provided
    value only into the first per CPU copy of the specified value,
    all others instances are left zeroed.

    This change explicitly copies the user-provided bytes to all the
    per CPU instances, keeping the sub-command syntax unchanged.

    v2 -> v3:
    - drop unused argument, as per Quentin's suggestion
    v1 -> v2:
    - rename the helper as per Quentin's suggestion

    Fixes: 71bb428fe2c1 ("tools: bpf: add bpftool")
    Signed-off-by: Paolo Abeni
    Reviewed-by: Quentin Monnet
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Paolo Abeni
     
  • [ Upstream commit 752bcf80f5549c9901b2e8bc77b2138de55b1026 ]

    Lance reported an issue with bpftool not being able to
    dump program if there are more programs loaded and you
    want to dump any but the first program, like:

    # bpftool prog
    28: kprobe name trace_req_start tag 1dfc28ba8b3dd597 gpl
    loaded_at 2019-01-18T17:02:40+1100 uid 0
    xlated 112B jited 109B memlock 4096B map_ids 13
    29: kprobe name trace_req_compl tag 5b6a5ecc6030a683 gpl
    loaded_at 2019-01-18T17:02:40+1100 uid 0
    xlated 928B jited 575B memlock 4096B map_ids 13,14
    # bpftool prog dum jited tag 1dfc28ba8b3dd597
    0: push %rbp
    1: mov %rsp,%rbp
    ...

    # bpftool prog dum jited tag 5b6a5ecc6030a683
    Error: can't get prog info (29): Bad address

    The problem is in the prog_fd_by_tag function not cleaning
    the struct bpf_prog_info before another request, so the
    previous program length is still in there and kernel assumes
    it needs to dump the program, which fails because there's no
    user pointer set.

    Moving the struct bpf_prog_info declaration into the loop,
    so it gets cleaned before each query.

    Fixes: 71bb428fe2c1 ("tools: bpf: add bpftool")
    Reported-by: Lance Digby
    Signed-off-by: Jiri Olsa
    Reviewed-by: Quentin Monnet
    Acked-by: Jakub Kicinski
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin

    Jiri Olsa
     
  • [ Upstream commit 1fde6f21d90f8ba5da3cb9c54ca991ed72696c43 ]

    /proc entries under /proc/net/* can't be cached into dcache because
    setns(2) can change current net namespace.

    [akpm@linux-foundation.org: coding-style fixes]
    [akpm@linux-foundation.org: avoid vim miscolorization]
    [adobriyan@gmail.com: write test, add dummy ->d_revalidate hook: necessary if /proc/net/* is pinned at setns time]
    Link: http://lkml.kernel.org/r/20190108192350.GA12034@avx2
    Link: http://lkml.kernel.org/r/20190107162336.GA9239@avx2
    Fixes: 1da4d377f943fe4194ffb9fb9c26cc58fad4dd24 ("proc: revalidate misc dentries")
    Signed-off-by: Alexey Dobriyan
    Reported-by: Mateusz Stępień
    Reported-by: Ahmad Fatoum
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Alexey Dobriyan
     
  • [ Upstream commit 7d4e591bc051d3382c45caaa2530969fb42ed23d ]

    posix_timers fails to build due to undefined reference errors:

    aarch64-linaro-linux-gcc --sysroot=/build/tmp-rpb-glibc/sysroots/hikey
    -O2 -pipe -g -feliminate-unused-debug-types -O3 -Wl,-no-as-needed -Wall
    -DKTEST -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -lrt -lpthread
    posix_timers.c
    -o /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/timers/posix_timers
    /tmp/cc1FTZzT.o: In function `check_timer_create':
    /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/timers/posix_timers.c:157:
    undefined reference to `timer_create'
    /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/timers/posix_timers.c:170:
    undefined reference to `timer_settime'
    collect2: error: ld returned 1 exit status

    It's GNU Make and linker specific.

    The default Makefile rule looks like:

    $(CC) $(CFLAGS) $(LDFLAGS) $@ $^ $(LDLIBS)

    When linking is done by gcc itself, no issue, but when it needs to be passed
    to proper ld, only LDLIBS follows and then ld cannot know what libs to link
    with.

    More detail:
    https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

    LDFLAGS
    Extra flags to give to compilers when they are supposed to invoke the linker,
    ‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable
    instead.

    LDLIBS
    Library flags or names given to compilers when they are supposed to invoke the
    linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to
    LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS
    variable.

    https://lkml.org/lkml/2010/2/10/362

    tools/perf: libraries must come after objects

    Link order matters, use LDLIBS instead of LDFLAGS to properly link against
    libpthread.

    Signed-off-by: Denys Dmytriyenko
    Signed-off-by: Fathi Boudra
    Signed-off-by: Shuah Khan
    Signed-off-by: Sasha Levin

    Fathi Boudra
     
  • [ Upstream commit 870f193d48c25a97d61a8e6c04e3c29a2c606850 ]

    reuseport_bpf_numa fails to build due to undefined reference errors:

    aarch64-linaro-linux-gcc
    --sysroot=/build/tmp-rpb-glibc/sysroots/hikey -Wall
    -Wl,--no-as-needed -O2 -g -I../../../../usr/include/ -Wl,-O1
    -Wl,--hash-style=gnu -Wl,--as-needed -lnuma reuseport_bpf_numa.c
    -o
    /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/net/reuseport_bpf_numa
    /tmp/ccfUuExT.o: In function `send_from_node':
    /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/net/reuseport_bpf_numa.c:138:
    undefined reference to `numa_run_on_node'
    /tmp/ccfUuExT.o: In function `main':
    /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/net/reuseport_bpf_numa.c:230:
    undefined reference to `numa_available'
    /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/net/reuseport_bpf_numa.c:233:
    undefined reference to `numa_max_node'

    It's GNU Make and linker specific.

    The default Makefile rule looks like:

    $(CC) $(CFLAGS) $(LDFLAGS) $@ $^ $(LDLIBS)

    When linking is done by gcc itself, no issue, but when it needs to be passed
    to proper ld, only LDLIBS follows and then ld cannot know what libs to link
    with.

    More detail:
    https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

    LDFLAGS
    Extra flags to give to compilers when they are supposed to invoke the linker,
    ‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable
    instead.

    LDLIBS
    Library flags or names given to compilers when they are supposed to invoke the
    linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to
    LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS
    variable.

    https://lkml.org/lkml/2010/2/10/362

    tools/perf: libraries must come after objects

    Link order matters, use LDLIBS instead of LDFLAGS to properly link against
    libnuma.

    Signed-off-by: Fathi Boudra
    Signed-off-by: Shuah Khan
    Signed-off-by: Sasha Levin

    Fathi Boudra
     
  • [ Upstream commit 2b531b6137834a55857a337ac17510d6436b6fbb ]

    The cpu-hotplug test assumes that we can offline the maximum CPU as
    described by /sys/devices/system/cpu/offline. However, in the case
    where the number of CPUs exceeds like kernel configuration then
    the offline count can be greater than the present count and we end
    up trying to test the offlining of a CPU that is not available to
    offline. Fix this by testing the maximum present CPU instead.

    Also, the test currently offlines the CPU and does not online it,
    so fix this by onlining the CPU after the test.

    Fixes: d89dffa976bc ("fault-injection: add selftests for cpu and memory hotplug")
    Signed-off-by: Colin Ian King
    Signed-off-by: Shuah Khan
    Signed-off-by: Sasha Levin

    Colin Ian King
     
  • [ Upstream commit 8bf8c6da53c2265aea365a1de6038f118f522113 ]

    While updating perf to work with Python3 and Python2 I noticed that the
    stat-cpi script was dumping core.

    $ perf stat -e cycles,instructions record -o /tmp/perf.data /bin/false

    Performance counter stats for '/bin/false':

    802,148 cycles

    604,622 instructions 802,148 cycles
    604,622 instructions

    0.001445842 seconds time elapsed

    $ perf script -i /tmp/perf.data -s scripts/python/stat-cpi.py
    Segmentation fault (core dumped)
    ...
    ...
    rblist=rblist@entry=0xb2a200 ,
    new_entry=new_entry@entry=0x7ffcb755c310) at util/rblist.c:33
    ctx=, type=, create=,
    cpu=, evsel=) at util/stat-shadow.c:118
    ctx=, type=, st=)
    at util/stat-shadow.c:196
    count=count@entry=727442, cpu=cpu@entry=0, st=0xb2a200 )
    at util/stat-shadow.c:239
    config=config@entry=0xafeb40 ,
    counter=counter@entry=0x133c6e0) at util/stat.c:372
    ...
    ...

    The issue is that since 1fcd03946b52 perf_stat__update_shadow_stats now calls
    update_runtime_stat passing rt_stat rather than calling update_stats but
    perf_stat__init_shadow_stats has never been called to initialize rt_stat in
    the script path processing recorded stat data.

    Since I can't see any reason why perf_stat__init_shadow_stats() is presently
    initialized like it is in builtin-script.c::perf_sample__fprint_metric()
    [4bd1bef8bba2f] I'm proposing it instead be initialized once in __cmd_script

    Committer testing:

    After applying the patch:

    # perf script -i /tmp/perf.data -s tools/perf/scripts/python/stat-cpi.py
    0.001970: cpu -1, thread -1 -> cpi 1.709079 (1075684/629394)
    #

    No segfault.

    Signed-off-by: Tony Jones
    Reviewed-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Tested-by: Ravi Bangoria
    Cc: Andi Kleen
    Cc: Jin Yao
    Fixes: 1fcd03946b52 ("perf stat: Update per-thread shadow stats")
    Link: http://lkml.kernel.org/r/20190120191414.12925-1-tonyj@suse.de
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Tony Jones
     
  • [ Upstream commit 1497e804d1a6e2bd9107ddf64b0310449f4673eb ]

    This patch fixes an issue in cpumap.c when used with the TOPOLOGY
    header. In some configurations, some NUMA nodes may have no CPU (empty
    cpulist). Yet a cpumap map must be created otherwise perf abort with an
    error. This patch handles this case by creating a dummy map.

    Before:

    $ perf record -o - -e cycles noploop 2 | perf script -i -
    0x6e8 [0x6c]: failed to process type: 80

    After:

    $ perf record -o - -e cycles noploop 2 | perf script -i -
    noploop for 2 seconds

    Signed-off-by: Stephane Eranian
    Acked-by: Jiri Olsa
    Cc: Andi Kleen
    Cc: Kan Liang
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1547885559-1657-1-git-send-email-eranian@google.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Stephane Eranian
     
  • [ Upstream commit 96167167b6e17b25c0e05ecc31119b73baeab094 ]

    'perf script' crashes currently when printing mixed trace points and
    other events because the trace format does not handle events without
    trace meta data. Add a simple check to avoid that.

    % cat > test.c
    main()
    {
    printf("Hello world\n");
    }
    ^D
    % gcc -g -o test test.c
    % sudo perf probe -x test 'test.c:3'
    % perf record -e '{cpu/cpu-cycles,period=10000/,probe_test:main}:S' ./test
    % perf script

    Committer testing:

    Before:

    # perf probe -x /lib64/libc-2.28.so malloc
    Added new event:
    probe_libc:malloc (on malloc in /usr/lib64/libc-2.28.so)

    You can now use it in all perf tools, such as:

    perf record -e probe_libc:malloc -aR sleep 1

    # perf probe -l
    probe_libc:malloc (on __libc_malloc@malloc/malloc.c in /usr/lib64/libc-2.28.so)
    # perf record -e '{cpu/cpu-cycles,period=10000/,probe_libc:*}:S' sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.023 MB perf.data (40 samples) ]
    # perf script
    Segmentation fault (core dumped)
    ^C
    #

    After:

    # perf script | head -6
    sleep 2888 94796.944981: 16198 cpu/cpu-cycles,period=10000/: ffffffff925dc04f get_random_u32+0x1f (/lib/modules/5.0.0-rc2+/build/vmlinux)
    sleep 2888 [-01] 94796.944981: probe_libc:malloc:
    sleep 2888 94796.944983: 4713 cpu/cpu-cycles,period=10000/: ffffffff922763af change_protection+0xcf (/lib/modules/5.0.0-rc2+/build/vmlinux)
    sleep 2888 [-01] 94796.944983: probe_libc:malloc:
    sleep 2888 94796.944986: 9934 cpu/cpu-cycles,period=10000/: ffffffff922777e0 move_page_tables+0x0 (/lib/modules/5.0.0-rc2+/build/vmlinux)
    sleep 2888 [-01] 94796.944986: probe_libc:malloc:
    #

    Signed-off-by: Andi Kleen
    Tested-by: Arnaldo Carvalho de Melo
    Acked-by: Jiri Olsa
    Link: http://lkml.kernel.org/r/20190117194834.21940-1-andi@firstfloor.org
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin

    Andi Kleen
     

10 Mar, 2019

1 commit

  • commit 344c0152d878922365464b7140c74c2a5e073d99 upstream.

    commit a6a9be9270c87 ("selftests: firmware: return Kselftest Skip code
    for skipped tests") by Shuah modified failures to return the special
    error code of $ksft_skip (4). We have a corner case issue where we
    *do* want to verify_reqs().

    Cc: # >= 4.18
    Fixes: a6a9be9270c87 ("selftests: firmware: return Kselftest Skip code for for skipped tests")
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Greg Kroah-Hartman

    Luis Chamberlain
     

06 Mar, 2019

1 commit

  • [ Upstream commit 94a980c39c8e3f8abaff5d3b5bbcd4ccf1c02c4f ]

    Fix a call to userspace_mem_region_find to conform to its spec of
    taking an inclusive, inclusive range. It was previously being called
    with an inclusive, exclusive range. Also remove a redundant region bounds
    check in vm_userspace_mem_region_add. Region overlap checking is already
    performed by the call to userspace_mem_region_find.

    Tested: Compiled tools/testing/selftests/kvm with -static
    Ran all resulting test binaries on an Intel Haswell test machine
    All tests passed

    Signed-off-by: Ben Gardon
    Reviewed-by: Jim Mattson
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Sasha Levin

    Ben Gardon