1. Feb 02, 2023
    • Athira Rajeev's avatar
      perf tests shell: Fix check for libtracevent support · 766b0bee
      Athira Rajeev authored
      
      
      Test “Use vfs_getname probe to get syscall args filenames” fails in
      environment with missing libtraceevent support as below:
      
        82: Use vfs_getname probe to get syscall args filenames             :
        --- start ---
        test child forked, pid 304726
        Recording open file:
        event syntax error: 'probe:vfs_getname*'
                             \___ unsupported tracepoint
      
        libtraceevent is necessary for tracepoint support
        Run 'perf list' for a list of valid events
      
         Usage: perf record [<options>] [<command>]
            or: perf record [<options>] -- <command> [<options>]
      
            -e, --event <event>   event selector. use 'perf list' to list available events
        test child finished with -1
        ---- end ----
        Use vfs_getname probe to get syscall args filenames: FAILED!
      
      The environment has debuginfo but is missing the libtraceevent devel.
      
      Hence perf is compiled without libtraceevent support.  The test tries to
      add probe “probe:vfs_getname” and then uses it with “perf record”.  This
      fails at function “parse_events_add_tracepoint" due to missing
      libtraceevent.
      
      Similarly "probe libc's inet_pton & backtrace it with ping" test slso
      fails with same reason.
      
      Add a function in 'perf test shell' library to check if perf record with
      —dry-run reports any error on missing support for libtraceevent. Update
      both the tests to use this new function “skip_no_probe_record_support”
      before proceeding With using probe point via perf builtin record.
      
      With the change,
      
        82: Use vfs_getname probe to get syscall args filenames             :
        --- start ---
        test child forked, pid 305014
        Recording open file:
        libtraceevent is necessary for tracepoint support
        test child finished with -2
        ---- end ----
        Use vfs_getname probe to get syscall args filenames: Skip
      
         81: probe libc's inet_pton & backtrace it with ping                 :
        --- start ---
        test child forked, pid 305036
        libtraceevent is necessary for tracepoint support
        test child finished with -2
        ---- end ----
        probe libc's inet_pton & backtrace it with ping: Skip
      
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Disha Goel <disgoel@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Nageswara R Sastry <rnsastry@linux.ibm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: kjain@linux.ibm.com,
      Cc: linuxppc-dev@lists.ozlabs.org
      Link: http://lore.kernel.org/r/20230201180421.59640-2-atrajeev@linux.vnet.ibm.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      766b0bee
    • Athira Rajeev's avatar
      perf tests shell: Add check for perf data file in record+probe_libc_inet_pton test · 84cce3d6
      Athira Rajeev authored
      
      
      The "probe libc's inet_pton & backtrace it with ping" test installs a
      uprobe and uses perf record/script to check the backtrace. Currently
      even if the "perf record" fails, the test reports success. Logs below:
      
        # ./perf test -v "probe libc's inet_pton & backtrace it with ping"
        81: probe libc's inet_pton & backtrace it with ping                 :
        --- start ---
        test child forked, pid 304211
        failed to open /tmp/perf.data.Btf: No such file or directory
        test child finished with 0
        ---- end ----
        probe libc's inet_pton & backtrace it with ping: Ok
      
      Fix this by adding check for presence of perf.data file
      before proceeding with "perf script".
      
      With the patch changes, test reports fail correctly.
      
       # ./perf test -v "probe libc's inet_pton & backtrace it with ping"
       81: probe libc's inet_pton & backtrace it with ping                 :
        --- start ---
        test child forked, pid 304358
        FAIL: perf record failed to create "/tmp/perf.data.Uoi"
        test child finished with -1
        ---- end ----
        probe libc's inet_pton & backtrace it with ping: FAILED!
      
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Disha Goel <disgoel@linux.ibm.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Nageswara R Sastry <rnsastry@linux.ibm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: linuxppc-dev@lists.ozlabs.org
      Link: http://lore.kernel.org/r/20230201180421.59640-1-atrajeev@linux.vnet.ibm.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      84cce3d6
    • Namhyung Kim's avatar
      perf test: Add pipe mode test to the Intel PT test suite · e072b097
      Namhyung Kim authored
      
      
      The test_pipe() function will check perf report and perf inject with
      pipe input.
      
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lore.kernel.org/r/20230131023350.1903992-5-namhyung@kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e072b097
    • Namhyung Kim's avatar
      perf session: Avoid calling lseek(2) for pipe · 14bf4784
      Namhyung Kim authored
      
      
      We should not call lseek(2) for pipes as it won't work.  And we already
      in the proper place to read the data for AUXTRACE.  Add the comment like
      in the PERF_RECORD_HEADER_TRACING_DATA.
      
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lore.kernel.org/r/20230131023350.1903992-4-namhyung@kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      14bf4784
    • Namhyung Kim's avatar
      perf intel-pt: Do not try to queue auxtrace data on pipe · aeb802f8
      Namhyung Kim authored
      When it processes AUXTRACE_INFO, it calls to auxtrace_queue_data() to
      collect AUXTRACE data first.  That won't work with pipe since it needs
      lseek() to read the scattered aux data.
      
        $ perf record -o- -e intel_pt// true | perf report -i- --itrace=i100
        # To display the perf.data header info, please use --header/--header-only options.
        #
        0x4118 [0xa0]: failed to process type: 70
        Error:
        failed to process sample
      
      For the pipe mode, it can handle the aux data as it gets.  But there's
      no guarantee it can get the aux data in time.  So the following warning
      will be shown at the beginning:
      
        WARNING: Intel PT with pipe mode is not recommended.
                 The output cannot relied upon.  In particular,
                 time stamps and the order of events may be incorrect.
      
      Fixes: dbd13432
      
       ("perf intel-pt: Add support for decoding AUX area samples")
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lore.kernel.org/r/20230131023350.1903992-3-namhyung@kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      aeb802f8
    • Namhyung Kim's avatar
      perf inject: Use perf_data__read() for auxtrace · 1746212d
      Namhyung Kim authored
      In copy_bytes(), it reads the data from the (input) fd and writes it to
      the output file.  But it does with the read(2) unconditionally which
      caused a problem of mixing buffered vs unbuffered I/O together.
      
      You can see the problem when using pipes.
      
        $ perf record -e intel_pt// -o- true | perf inject -b > /dev/null
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.000 MB - ]
        0x45c0 [0x30]: failed to process type: 71
      
      It should use perf_data__read() to honor the 'use_stdio' setting.
      
      Fixes: 60136667
      
       ("perf data: Allow to use stdio functions for pipe mode")
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: https://lore.kernel.org/r/20230131023350.1903992-2-namhyung@kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1746212d
  2. Jan 31, 2023
    • Mike Leach's avatar
      perf cs-etm: Update decoder code for OpenCSD version 1.4 · c6535b6b
      Mike Leach authored
      
      
      OpenCSD version 1.4 is released with support for FEAT_ITE.
      
      This adds a new packet type, with associated output element ID in the
      packet type enum - OCSD_GEN_TRC_ELEM_INSTRUMENTATION.
      
      As we just ignore this packet in perf, add to the switch statement to
      avoid the "enum not handled in switch error", but conditionally so as
      not to break the perf build for older OpenCSD installations.
      
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarMike Leach <mike.leach@linaro.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: coresight@lists.linaro.org
      Cc: linux-arm-kernel@lists.infradead.org
      Link: https://lore.kernel.org/r/20230120153706.20388-1-mike.leach@linaro.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c6535b6b
    • Naveen N. Rao's avatar
      perf test: Fix DWARF unwind test by adding non-inline to expected function in a backtrace · dfadf8b3
      Naveen N. Rao authored
      'DWARF unwind' 'perf test' can sometimes fail:
      
        $ perf test -v 74
        Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
         74: Test dwarf unwind                                               :
        --- start ---
        test child forked, pid 3785254
        Problems creating module maps, continuing anyway...
        Problems creating module maps, continuing anyway...
        unwind: test__arch_unwind_sample:ip = 0x102d0ad4c (0x36ad4c)
        unwind: access_mem addr 0x7fffc33128c8, val 1031c3228, offset 120
        unwind: access_mem addr 0x7fffc33128d0, val 12427cc70, offset 128
        <snip>
        unwind: test_dwarf_unwind__krava_3:ip = 0x102b8768b (0x1e768b)
        unwind: access_mem addr 0x7fffc3313048, val 7fffc3313050, offset 2040
        unwind: access_mem addr 0x7fffc3313060, val 102b8777c, offset 2064
        unwind: test_dwarf_unwind__krava_2:ip = 0x102b8770b (0x1e770b)
        unwind: access_mem addr 0x7fffc3313088, val 7fffc3313090, offset 2104
        unwind: access_mem addr 0x7fffc33130a0, val 102b87890, offset 2128
        unwind: test_dwarf_unwind__krava_1:ip = 0x102b8777b (0x1e777b)
        unwind: access_mem addr 0x7fffc3313108, val 10323a274, offset 2232
        unwind: access_mem addr 0x7fffc3313110, val ffffffffffffffff, offset 2240
        unwind: access_mem addr 0x7fffc3313118, val 102c08ed0, offset 2248
        unwind: access_mem addr 0x7fffc3313120, val 1031db000, offset 2256
        unwind: access_mem addr 0x7fffc3313128, val 7fffc3313130, offset 2264
        unwind: access_mem addr 0x7fffc3313140, val 102b45ee8, offset 2288
        unwind: '':ip = 0x102b8788f (0x1e788f)
        failed: got unresolved address 0x102b8788f
        unwind: failed with 'no error'
        got wrong number of stack entries 0 != 8
        test child finished with -1
        ---- end ----
        Test dwarf unwind: FAILED!
      
      We expect to resolve test__dwarf_unwind as the last symbol, but that
      function can be optimized away:
      
        $ objdump -tT /usr/bin/perf | grep dwarf_unwind
        000000000083b018 g    DO .data	0000000000000040  Base        tests__dwarf_unwind
        00000000001e7750 g    DF .text	0000000000000068  Base        0x60 test_dwarf_unwind__krava_1
        00000000001e76e0 g    DF .text	0000000000000068  Base        0x60 test_dwarf_unwind__krava_2
        00000000001e7620 g    DF .text	00000000000000b4  Base        0x60 test_dwarf_unwind__krava_3
        00000000001e74f0 g    DF .text	0000000000000128  Base        0x60 test_dwarf_unwind__compare
        00000000001e7350 g    DF .text	000000000000019c  Base        0x60 test_dwarf_unwind__thread
        000000000083b000 g    DO .data	0000000000000018  Base        suite__dwarf_unwind
      
      Fix this similar to commit fdf7c49c
      
       ("perf tests: Fix dwarf
      unwind for stripped binaries") by marking the function as a global and
      adding the 'noinline' attribute to it.
      
      With this patch:
      
        $ objdump -tT perf | grep dwarf_unwind
        000000000083b018 g    DO .data	0000000000000040  Base        tests__dwarf_unwind
        00000000001e80f0 g    DF .text	0000000000000068  Base        0x60 test_dwarf_unwind__krava_1
        00000000001e8080 g    DF .text	0000000000000068  Base        0x60 test_dwarf_unwind__krava_2
        00000000001e7fc0 g    DF .text	00000000000000b4  Base        0x60 test_dwarf_unwind__krava_3
        00000000001e7e90 g    DF .text	0000000000000128  Base        0x60 test_dwarf_unwind__compare
        00000000001e7cf0 g    DF .text	000000000000019c  Base        0x60 test_dwarf_unwind__thread
        00000000001e8160 g    DF .text	0000000000000248  Base        0x60 test__dwarf_unwind
        000000000083b000 g    DO .data	0000000000000018  Base        suite__dwarf_unwind
        $ ./perf test 74
         74: Test dwarf unwind                                               : Ok
      
      Reported-by: default avatarDisha Goel <disgoel@linux.vnet.ibm.com>
      Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Link: http://lore.kernel.org/lkml/20230125123442.107156-1-naveen.n.rao@linux.vnet.ibm.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      dfadf8b3
  3. Jan 28, 2023
  4. Jan 23, 2023
  5. Jan 22, 2023
    • Andreas Gruenbacher's avatar
      Revert "gfs2: stop using generic_writepages in gfs2_ail1_start_one" · 95ecbd0f
      Andreas Gruenbacher authored
      Commit b2b0a5e9 switched from generic_writepages() to
      filemap_fdatawrite_wbc() in gfs2_ail1_start_one() on the path to
      replacing ->writepage() with ->writepages() and eventually eliminating
      the former.  Function gfs2_ail1_start_one() is called from
      gfs2_log_flush(), our main function for flushing the filesystem log.
      
      Unfortunately, at least as implemented today, ->writepage() and
      ->writepages() are entirely different operations for journaled data
      inodes: while the former creates and submits transactions covering the
      data to be written, the latter flushes dirty buffers out to disk.
      
      With gfs2_ail1_start_one() now calling ->writepages(), we end up
      creating filesystem transactions while we are in the course of a log
      flush, which immediately deadlocks on the sdp->sd_log_flush_lock
      semaphore.
      
      Work around that by going back to how things used to work before commit
      b2b0a5e9 for now; figuring out a superior solution will take time we
      don't have available right now.  However ...
      
      Since the removal of generic_writepages() is imminent, open-code it
      here.  We're already inside a blk_start_plug() ...  blk_finish_plug()
      section here, so skip that part of the original generic_writepages().
      
      This reverts commit b2b0a5e9
      
      .
      
      Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
      Acked-by: default avatarChristoph Hellwig <hch@lst.de>
      95ecbd0f