linux-stable/tools/perf
Thomas Richter 810f6b9efe perf record: Fix s390 missing module symbol and warning for non-root users
[ Upstream commit 6738028dd5 ]

Command 'perf record' and 'perf report' on a system without kernel
debuginfo packages uses /proc/kallsyms and /proc/modules to find
addresses for kernel and module symbols. On x86 this works for root and
non-root users.

On s390, when invoked as non-root user, many of the following warnings
are shown and module symbols are missing:

    proc/{kallsyms,modules} inconsistency while looking for
        "[sha1_s390]" module!

Command 'perf record' creates a list of module start addresses by
parsing the output of /proc/modules and creates a PERF_RECORD_MMAP
record for the kernel and each module. The following function call
sequence is executed:

  machine__create_kernel_maps
    machine__create_module
      modules__parse
        machine__create_module --> for each line in /proc/modules
          arch__fix_module_text_start

Function arch__fix_module_text_start() is s390 specific. It opens
file /sys/module/<name>/sections/.text to extract the module's .text
section start address. On s390 the module loader prepends a header
before the first section, whereas on x86 the module's text section
address is identical the the module's load address.

However module section files are root readable only. For non-root the
read operation fails and machine__create_module() returns an error.
Command perf record does not generate any PERF_RECORD_MMAP record
for loaded modules. Later command perf report complains about missing
module maps.

To fix this function arch__fix_module_text_start() always returns
success. For root users there is no change, for non-root users
the module's load address is used as module's text start address
(the prepended header then counts as part of the text section).

This enable non-root users to use module symbols and avoid the
warning when perf report is executed.

Output before:

  [tmricht@m83lp54 perf]$ ./perf report -D | fgrep MMAP
  0 0x168 [0x50]: PERF_RECORD_MMAP ... x [kernel.kallsyms]_text

Output after:

  [tmricht@m83lp54 perf]$ ./perf report -D | fgrep MMAP
  0 0x168 [0x50]: PERF_RECORD_MMAP ... x [kernel.kallsyms]_text
  0 0x1b8 [0x98]: PERF_RECORD_MMAP ... x /lib/modules/.../autofs4.ko.xz
  0 0x250 [0xa8]: PERF_RECORD_MMAP ... x /lib/modules/.../sha_common.ko.xz
  0 0x2f8 [0x98]: PERF_RECORD_MMAP ... x /lib/modules/.../des_generic.ko.xz

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Link: http://lkml.kernel.org/r/20190522144601.50763-4-tmricht@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-06-22 08:16:17 +02:00
..
arch perf record: Fix s390 missing module symbol and warning for non-root users 2019-06-22 08:16:17 +02:00
bench perf bench numa: Add define for RUSAGE_THREAD if not present 2019-05-25 18:25:36 +02:00
Documentation perf config: Fix an error in the config template documentation 2019-04-20 09:15:02 +02:00
jvmti perf tools: Fix undefined symbol scnprintf in libperf-jvmti.so 2018-11-27 16:10:49 +01:00
pmu-events perf vendor events intel: Fix wrong filter_band* values for uncore events 2018-11-13 11:14:50 -08:00
python License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
scripts perf script python: Fix export-to-sqlite.py sample columns 2018-10-18 09:16:23 +02:00
tests perf tests: Fix a memory leak in test__perf_evsel__tp_sched_test() 2019-04-20 09:15:02 +02:00
trace License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ui perf report: Fix wrong jump arrow 2018-05-30 07:52:40 +02:00
util perf data: Fix 'strncat may truncate' build failure with recent gcc 2019-06-22 08:16:17 +02:00
.gitignore perf tools: Add trace/beauty/generated/ into .gitignore 2018-05-30 12:19:59 +02:00
Build perf trace: Only build tools/perf/trace/beauty/ when building 'perf trace' 2017-07-18 23:13:52 -03:00
builtin-annotate.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-bench.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-buildid-cache.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-buildid-list.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-c2c.c perf c2c: Fix c2c report for empty numa node 2019-04-05 22:31:27 +02:00
builtin-config.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-data.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-diff.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-evlist.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-ftrace.c tools include: Adopt strstarts() from the kernel 2017-07-20 15:46:10 -03:00
builtin-help.c perf help: Fix a bug during strstart() conversion 2018-02-25 11:07:54 +01:00
builtin-inject.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-kallsyms.c perf tools: Including missing inttypes.h header 2017-04-19 13:01:46 -03:00
builtin-kmem.c kmemcheck: remove whats left of NOTRACK flags 2018-02-22 15:42:23 +01:00
builtin-kvm.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-list.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-lock.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-mem.c perf tools: Fix leaking rec_argv in error cases 2017-12-10 13:40:43 +01:00
builtin-probe.c perf buildid-cache: Support binary objects from other namespaces 2017-07-18 23:14:11 -03:00
builtin-record.c perf record: Synthesize features before events in pipe mode 2018-12-29 13:39:08 +01:00
builtin-report.c perf unwind: Do not look just at the global callchain_param.record_mode 2018-04-26 11:02:06 +02:00
builtin-sched.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin-script.c perf tools: Fix snprint warnings for gcc 8 2018-10-18 09:16:28 +02:00
builtin-stat.c perf stat: Fix core dump when flag T is used 2018-05-30 07:52:31 +02:00
builtin-timechart.c perf tools: Fix leaking rec_argv in error cases 2017-12-10 13:40:43 +01:00
builtin-top.c perf top: Fix error handling in cmd_top() 2019-04-20 09:15:02 +02:00
builtin-trace.c perf trace: Support multiple "vfs_getname" probes 2019-03-13 14:03:21 -07:00
builtin-version.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
builtin.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
check-headers.sh tools include: Adopt linux/bits.h 2019-04-27 09:35:41 +02:00
command-list.txt perf tools: Missing c2c command in command-list 2017-03-13 10:59:31 -03:00
CREDITS
design.txt
Makefile perf tools: Disable parallelism for 'make clean' 2018-11-04 14:52:48 +01:00
Makefile.config perf tools: Fix use of alternatives to find JDIR 2018-11-13 11:14:51 -08:00
Makefile.perf tools: fix cross-compile var clobbering 2019-01-13 10:01:02 +01:00
MANIFEST perf tools: Get all of tools/{arch,include}/ in the MANIFEST 2017-09-25 10:39:43 -03:00
perf-archive.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf-completion.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf-read-vdso.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf-sys.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf-with-kcore.sh
perf.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf.h perf tools: Allow overriding MAX_NR_CPUS at compile time 2018-09-19 22:43:40 +02:00