perf/urgent improvements and fixes
Subsystems (2)
Arnaldo Carvalho de Melo
maintainerHi Ingo/Thomas,
Please consider pulling,
Best regards,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit bb6d3fb354c5ee8d6bde2d576eb7220ea09862b9:
Linux 5.6-rc1 (2020-02-09 16:08:48 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-5.6-20200214
for you to fetch changes up to 62765941155e487b351a72479078bd6fec973563:
perf llvm: Fix script used to obtain kernel make directives to work with new kbuild (2020-02-14 10:06:00 -0300)
----------------------------------------------------------------
perf/urgent fixes:
BPF:
Arnaldo Carvalho de Melo:
- Fix script used to obtain kernel make directives to work with new kbuild used for building BPF programs.
maps:
Jiri Olsa:
- Fixup kmap->kmaps backpointer in kernel maps.
arm64:
John Garry:
- Add arm64 version of get_cpuid() to get proper, arm64 specific output from 'perf list' and other tools.
perf top:
Kim Phillips:
- Update kernel idle symbols so that output in AMD systems is in line with other systems.
perf stat:
Kim Phillips:
- Don't report a null stalled cycles per insn metric.
tools headers:
Arnaldo Carvalho de Melo:
- Sync tools/ headers with the kernel sources to get things like syscall numbers and new arguments so that 'perf trace' can decode and use them in tracepoint filters, e.g. prctl's new PR_{G,S}ET_IO_FLUSHER options.
----------------------------------------------------------------
Arnaldo Carvalho de Melo (15):
tools include UAPI: Sync x86's syscalls_64.tbl, generic unistd.h and fcntl.h to pick up openat2 and pidfd_getfd tools headers UAPI: Sync copy of arm64's asm/unistd.h with the kernel sources
tools headers UAPI: Sync prctl.h with the kernel sources
perf beauty prctl: Export the 'options' strarray
perf trace: Resolve prctl's 'option' arg strings to numbers
tools headers UAPI: Sync sched.h with the kernel
tools headers uapi: Sync linux/fscrypt.h with the kernel sources
tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
tools headers UAPI: Sync asm-generic/mman-common.h with the kernel
tools include UAPI: Sync sound/asound.h copy
tools headers x86: Sync disabled-features.h
tools arch x86: Sync asm/cpufeatures.h with the kernel sources
tools headers kvm: Sync kvm headers with the kernel sources
tools headers kvm: Sync linux/kvm.h with the kernel sources
perf llvm: Fix script used to obtain kernel make directives to work with new kbuild
Jiri Olsa (4):
perf maps: Mark module DSOs with kernel type perf maps: Mark ksymbol DSOs with kernel type perf maps: Fix map__clone() for struct kmap perf maps: Move kmap::kmaps setup to maps__insert()
John Garry (1):
perf tools: Add arm64 version of get_cpuid()
Kim Phillips (3):
perf stat: Don't report a null stalled cycles per insn metric perf symbols: Update the list of kernel idle symbols perf symbols: Convert symbol__is_idle() to use strlist
tools/arch/arm64/include/uapi/asm/kvm.h | 12 +- tools/arch/arm64/include/uapi/asm/unistd.h | 1 + tools/arch/x86/include/asm/cpufeatures.h | 2 + tools/arch/x86/include/asm/disabled-features.h | 8 +- tools/include/uapi/asm-generic/mman-common.h | 2 + tools/include/uapi/asm-generic/unistd.h | 7 +- tools/include/uapi/drm/i915_drm.h | 32 +++++ tools/include/uapi/linux/fcntl.h | 2 +- tools/include/uapi/linux/fscrypt.h | 14 +- tools/include/uapi/linux/kvm.h | 5 + tools/include/uapi/linux/openat2.h | 39 ++++++ tools/include/uapi/linux/prctl.h | 4 + tools/include/uapi/linux/sched.h | 6 + tools/include/uapi/sound/asound.h | 155 ++++++++++++++++++---- tools/perf/arch/arm64/util/header.c | 63 ++++++--- tools/perf/arch/x86/entry/syscalls/syscall_64.tbl | 2 + tools/perf/builtin-trace.c | 4 +- tools/perf/check-headers.sh | 1 + tools/perf/trace/beauty/beauty.h | 2 + tools/perf/trace/beauty/prctl.c | 3 +- tools/perf/util/llvm-utils.c | 1 + tools/perf/util/machine.c | 26 ++-- tools/perf/util/map.c | 17 ++- tools/perf/util/stat-shadow.c | 6 - tools/perf/util/symbol.c | 17 ++- 25 files changed, 353 insertions(+), 78 deletions(-) create mode 100644 tools/include/uapi/linux/openat2.h
Test results:
The first ones are container based builds of tools/perf with and without libelf support. Where clang is available, it is also used to build perf with/without libelf, and building with LIBCLANGLLVM=1 (built-in clang) with gcc and clang when clang and its devel libraries are installed.
The objtool and samples/bpf/ builds are disabled now that I'm switching from using the sources in a local volume to fetching them from a http server to build it inside the container, to make it easier to build in a container cluster. Those will come back later.
Several are cross builds, the ones with -x-ARCH and the android one, and those may not have all the features built, due to lack of multi-arch devel packages, available and being used so far on just a few, like debian:experimental-x-{arm64,mipsel}.
The 'perf test' one will perform a variety of tests exercising tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands with a variety of command line event specifications to then intercept the sys_perf_event syscall to check that the perf_event_attr fields are set up as expected, among a variety of other unit tests.
Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/ with a variety of feature sets, exercising the build with an incomplete set of features as well as with a complete one. It is planned to have it run on each of the containers mentioned above, using some container orchestration infrastructure. Get in contact if interested in helping having this in place.
Clearlinux is failing when due to:
.gnu.debuglto_.debug_macro' referenced in section .gnu.debuglto_.debug_macro' of /tmp/build/perf/util/scripting-engines/perf-in.o: defined in discarded section `.gnu.debuglto_.debug_macro[wm4.stdcpredef.h.19.8dc41bed5d9037ff9622e015fb5f0ce3]' of /tmp/build/perf/util/scripting-engines/perf-in.o
OpenMandriva Cooker works well with gcc, uncovers a bug where we have to get compiler-clang.h from the kernel sources, will be fixed soon.
With the update of linux/linkage.h to move from ENTRY()/ENDPROC() to SYM_FUNC_START()/etc some of the older containers can't be used with clang, as the minimum version for the constructs used in the new linkage.h is 3.5, older versions (3.4, 3.4.2, etc) end up with:
bench/../../arch/x86/lib/memcpy_64.S:44:14: error: unexpected token in '.type' directive .type MEMCPY STT_FUNC ; .size MEMCPY, .-MEMCPY
^
Ubuntu 19.10 is failing when linking against libllvm, which isn't the default, needs to be investigated, haven't tested with CC=gcc, but should be the same problem:
+ make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= LIBCLANGLLVM=1 -C /git/linux/tools/perf O=/tmp/build/perf CC=clang
.../usr/bin/ld: /usr/lib/llvm-9/lib/libclangAnalysis.a(ExprMutationAnalyzer.cpp.o): in function `clang::ast_matchers::internal::matcher_ignoringImpCasts0Matcher::matches(clang::Expr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const':
(.text._ZNK5clang12ast_matchers8internal32matcher_ignoringImpCasts0Matcher7matchesERKNS_4ExprEPNS1_14ASTMatchFinderEPNS1_21BoundNodesTreeBuilderE[_ZNK5clang12ast_matchers8internal32matcher_ignoringImpCasts0Matcher7matchesERKNS_4ExprEPNS1_14ASTMatchFinderEPNS1_21BoundNodesTreeBuilderE]+0x43): undefined reference to `clang::ast_matchers::internal::DynTypedMatcher::matches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const' /usr/bin/ld: /usr/lib/llvm-9/lib/libclangAnalysis.a(ExprMutationAnalyzer.cpp.o): in function `clang::ast_matchers::internal::matcher_hasLoopVariable0Matcher::matches(clang::CXXForRangeStmt const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const':
(.text._ZNK5clang12ast_matchers8internal31matcher_hasLoopVariable0Matcher7matchesERKNS_15CXXForRangeStmtEPNS1_14ASTMatchFinderEPNS1_21BoundNodesTreeBuilderE[_ZNK5clang12ast_matchers8internal31matcher_hasLoopVariable0Matcher7matchesERKNS_15CXXForRangeStmtEPNS1_14ASTMatchFinderEPNS1_21BoundNodesTreeBuilderE]+0x48): undefined reference to `clang::ast_matchers::internal::DynTypedMatcher::matches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const'
...
It builds ok with the default set of options.
# export PERF_TARBALL=http://192.168.124.1/perf/perf-5.6.0-rc1.tar.xz # dm 1 alpine:3.4 : Ok gcc (Alpine 5.3.0) 5.3.0, clang version 3.8.0 (tags/RELEASE_380/final) 2 alpine:3.5 : Ok gcc (Alpine 6.2.1) 6.2.1 20160822, clang version 3.8.1 (tags/RELEASE_381/final) 3 alpine:3.6 : Ok gcc (Alpine 6.3.0) 6.3.0, clang version 4.0.0 (tags/RELEASE_400/final) 4 alpine:3.7 : Ok gcc (Alpine 6.4.0) 6.4.0, Alpine clang version 5.0.0 (tags/RELEASE_500/final) (based on LLVM 5.0.0) 5 alpine:3.8 : Ok gcc (Alpine 6.4.0) 6.4.0, Alpine clang version 5.0.1 (tags/RELEASE_501/final) (based on LLVM 5.0.1) 6 alpine:3.9 : Ok gcc (Alpine 8.3.0) 8.3.0, Alpine clang version 5.0.1 (tags/RELEASE_502/final) (based on LLVM 5.0.1) 7 alpine:3.10 : Ok gcc (Alpine 8.3.0) 8.3.0, Alpine clang version 8.0.0 (tags/RELEASE_800/final) (based on LLVM 8.0.0) 8 alpine:3.11 : Ok gcc (Alpine 9.2.0) 9.2.0, Alpine clang version 9.0.0 (https://git.alpinelinux.org/aports f7f0d2c2b8bcd6a5843401a9a702029556492689) (based on LLVM 9.0.0) 9 alpine:edge : Ok gcc (Alpine 9.2.0) 9.2.0, Alpine clang version 9.0.0 (git://git.alpinelinux.org/aports 25c73ae7b95bdb42ae5f0ceac3b703e766582527) (based on LLVM 9.0.0) 10 alt:p8 : Ok x86_64-alt-linux-gcc (GCC) 5.3.1 20151207 (ALT p8 5.3.1-alt3.M80P.1), clang version 3.8.0 (tags/RELEASE_380/final) 11 alt:p9 : Ok x86_64-alt-linux-gcc (GCC) 8.3.1 20190507 (ALT p9 8.3.1-alt5), clang version 7.0.1 12 alt:sisyphus : Ok x86_64-alt-linux-gcc (GCC) 9.2.1 20190827 (ALT Sisyphus 9.2.1-alt2), clang version 7.0.1 13 amazonlinux:1 : Ok gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2), clang version 3.6.2 (tags/RELEASE_362/final) 14 amazonlinux:2 : Ok gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6), clang version 7.0.1 (Amazon Linux 2 7.0.1-1.amzn2.0.2) 15 android-ndk:r12b-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 16 android-ndk:r15c-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 17 centos:5 : Ok gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) 18 centos:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23) 19 centos:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) 20 centos:8 : Ok gcc (GCC) 8.3.1 20190507 (Red Hat 8.3.1-4), clang version 8.0.1 (Red Hat 8.0.1-1.module_el8.1.0+215+a01033fb) 21 clearlinux:latest : Ok gcc (Clear Linux OS for Intel Architecture) 9.2.1 20200111 gcc-9-branch@280154, clang version 9.0.1 22 debian:8 : Ok gcc (Debian 4.9.2-10+deb8u2) 4.9.2, Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0) 23 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, clang version 3.8.1-24 (tags/RELEASE_381/final) 24 debian:10 : Ok gcc (Debian 8.3.0-6) 8.3.0, clang version 7.0.1-8 (tags/RELEASE_701/final) 25 debian:experimental : Ok gcc (Debian 9.2.1-28) 9.2.1 20200203, clang version 8.0.1-7 (tags/RELEASE_801/final) 26 debian:experimental-x-arm64 : Ok aarch64-linux-gnu-gcc (Debian 8.3.0-19) 8.3.0 27 debian:experimental-x-mips : Ok mips-linux-gnu-gcc (Debian 8.3.0-19) 8.3.0 28 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 9.2.1-24) 9.2.1 20200117 29 debian:experimental-x-mipsel : Ok mipsel-linux-gnu-gcc (Debian 9.2.1-8) 9.2.1 20190909 30 fedora:20 : Ok gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7) 31 fedora:22 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6), clang version 3.5.0 (tags/RELEASE_350/final) 32 fedora:23 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6), clang version 3.7.0 (tags/RELEASE_370/final) 33 fedora:24 : Ok gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1), clang version 3.8.1 (tags/RELEASE_381/final) 34 fedora:24-x-ARC-uClibc : Ok arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710 35 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1), clang version 3.9.1 (tags/RELEASE_391/final) 36 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2), clang version 4.0.1 (tags/RELEASE_401/final) 37 fedora:27 : Ok gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6), clang version 5.0.2 (tags/RELEASE_502/final) 38 fedora:28 : Ok gcc (GCC) 8.3.1 20190223 (Red Hat 8.3.1-2), clang version 6.0.1 (tags/RELEASE_601/final) 39 fedora:29 : Ok gcc (GCC) 8.3.1 20190223 (Red Hat 8.3.1-2), clang version 7.0.1 (Fedora 7.0.1-6.fc29) 40 fedora:30 : Ok gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1), clang version 8.0.0 (Fedora 8.0.0-3.fc30) 41 fedora:30-x-ARC-glibc : Ok arc-linux-gcc (ARC HS GNU/Linux glibc toolchain 2019.03-rc1) 8.3.1 20190225 42 fedora:30-x-ARC-uClibc : Ok arc-linux-gcc (ARCv2 ISA Linux uClibc toolchain 2019.03-rc1) 8.3.1 20190225 43 fedora:31 : Ok gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1), clang version 9.0.0 (Fedora 9.0.0-1.fc31) 44 fedora:32 : Ok gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1), clang version 9.0.0 (Fedora 9.0.0-1.fc32) 45 fedora:rawhide : Ok gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1), clang version 9.0.0 (Fedora 9.0.0-1.fc32) 46 gentoo-stage3-amd64:latest : Ok gcc (Gentoo 9.2.0-r2 p3) 9.2.0 47 mageia:5 : Ok gcc (GCC) 4.9.2, clang version 3.5.2 (tags/RELEASE_352/final) 48 mageia:6 : Ok gcc (Mageia 5.5.0-1.mga6) 5.5.0, clang version 3.9.1 (tags/RELEASE_391/final) 49 mageia:7 : Ok gcc (Mageia 8.3.1-0.20190524.1.mga7) 8.3.1 20190524, clang version 8.0.0 (Mageia 8.0.0-1.mga7) 50 manjaro:latest : Ok gcc (GCC) 9.2.0, clang version 9.0.0 (tags/RELEASE_900/final) 51 openmandriva:cooker : Ok gcc (GCC) 9.2.1 20191123 (OpenMandriva) 52 opensuse:15.0 : Ok gcc (SUSE Linux) 7.4.1 20190424 [gcc-7-branch revision 270538], clang version 5.0.1 (tags/RELEASE_501/final 312548) 53 opensuse:15.1 : Ok gcc (SUSE Linux) 7.5.0, clang version 7.0.1 (tags/RELEASE_701/final 349238) 54 opensuse:15.2 : Ok gcc (SUSE Linux) 7.5.0, clang version 7.0.1 (tags/RELEASE_701/final 349238) 55 opensuse:42.3 : Ok gcc (SUSE Linux) 4.8.5, clang version 3.8.0 (tags/RELEASE_380/final 262553) 56 opensuse:tumbleweed : Ok gcc (SUSE Linux) 9.2.1 20190903 [gcc-9-branch revision 275330], clang version 9.0.0 (tags/RELEASE_900/final 372316) 57 oraclelinux:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23.0.1) 58 oraclelinux:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39.0.3) 59 oraclelinux:8 : Ok gcc (GCC) 8.3.1 20190507 (Red Hat 8.3.1-4.5.0.5), clang version 8.0.1 (Red Hat 8.0.1-1.0.1.module+el8.1.0+5428+345cee14) 60 ubuntu:12.04 : Ok gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (based on LLVM 3.0) 61 ubuntu:14.04 : Ok gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 62 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609, clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final) 63 ubuntu:16.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 64 ubuntu:16.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 65 ubuntu:16.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 66 ubuntu:16.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 67 ubuntu:16.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 68 ubuntu:16.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 69 ubuntu:18.04 : Ok gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final) 70 ubuntu:18.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) 7.4.0 71 ubuntu:18.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) 7.4.0 72 ubuntu:18.04-x-m68k : Ok m68k-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 73 ubuntu:18.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 74 ubuntu:18.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 75 ubuntu:18.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 76 ubuntu:18.04-x-riscv64 : Ok riscv64-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 77 ubuntu:18.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 78 ubuntu:18.04-x-sh4 : Ok sh4-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 79 ubuntu:18.04-x-sparc64 : Ok sparc64-linux-gnu-gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 80 ubuntu:18.10 : Ok gcc (Ubuntu 8.3.0-6ubuntu1~18.10.1) 8.3.0, clang version 7.0.0-3 (tags/RELEASE_700/final) 81 ubuntu:19.04 : Ok gcc (Ubuntu 8.3.0-6ubuntu1) 8.3.0, clang version 8.0.0-3 (tags/RELEASE_800/final) 82 ubuntu:19.04-x-alpha : Ok alpha-linux-gnu-gcc (Ubuntu 8.3.0-6ubuntu1) 8.3.0 83 ubuntu:19.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 8.3.0-6ubuntu1) 8.3.0 84 ubuntu:19.04-x-hppa : Ok hppa-linux-gnu-gcc (Ubuntu 8.3.0-6ubuntu1) 8.3.0 85 ubuntu:19.10 : Ok gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008, clang version 9.0.0-2 (tags/RELEASE_900/final) #
# uname -a
Linux quaco 5.6.0-rc1+ #1 SMP Wed Feb 12 15:42:16 -03 2020 x86_64 x86_64 x86_64 GNU/Linux
# git log --oneline -1
62765941155e perf llvm: Fix script used to obtain kernel make directives to work with new kbuild
# perf version --build-options
perf version 5.6.rc1.g62765941155e
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
glibc: [ on ] # HAVE_GLIBC_SUPPORT
gtk2: [ on ] # HAVE_GTK2_SUPPORT
syscall_table: [ on ] # HAVE_SYSCALL_TABLE_SUPPORT
libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
aio: [ on ] # HAVE_AIO_SUPPORT
zstd: [ on ] # HAVE_ZSTD_SUPPORT
# perf test
1: vmlinux symtab matches kallsyms : Ok
2: Detect openat syscall event : Ok
3: Detect openat syscall event on all cpus : Ok
4: Read samples using the mmap interface : Ok
5: Test data source output : Ok
6: Parse event definition strings : Ok
7: Simple expression parser : Ok
8: PERF_RECORD_* events & perf_sample fields : Ok
9: Parse perf pmu format : Ok
10: DSO data read : Ok
11: DSO data cache : Ok
12: DSO data reopen : Ok
13: Roundtrip evsel->name : Ok
14: Parse sched tracepoints fields : Ok
15: syscalls:sys_enter_openat event fields : Ok
16: Setup struct perf_event_attr : Ok
17: Match and link multiple hists : Ok
18: 'import perf' in python : Ok
19: Breakpoint overflow signal handler : Ok
20: Breakpoint overflow sampling : Ok
21: Breakpoint accounting : Ok
22: Watchpoint :
22.1: Read Only Watchpoint : Skip
22.2: Write Only Watchpoint : Ok
22.3: Read / Write Watchpoint : Ok
22.4: Modify Watchpoint : Ok
23: Number of exit events of a simple workload : Ok
24: Software clock events period values : Ok
25: Object code reading : Ok
26: Sample parsing : Ok
27: Use a dummy software event to keep tracking : Ok
28: Parse with no sample_id_all bit set : Ok
29: Filter hist entries : Ok
30: Lookup mmap thread : Ok
31: Share thread maps : Ok
32: Sort output of hist entries : Ok
33: Cumulate child hist entries : Ok
34: Track with sched_switch : Ok
35: Filter fds with revents mask in a fdarray : Ok
36: Add fd to a fdarray, making it autogrow : Ok
37: kmod_path__parse : Ok
38: Thread map : Ok
39: LLVM search and compile :
39.1: Basic BPF llvm compile : Ok
39.2: kbuild searching : Ok
39.3: Compile source for BPF prologue generation : Ok
39.4: Compile source for BPF relocation : Ok
40: Session topology : Ok
41: BPF filter :
41.1: Basic BPF filtering : Ok
41.2: BPF pinning : Ok
41.3: BPF prologue generation : Ok
41.4: BPF relocation checker : Ok
42: Synthesize thread map : Ok
43: Remove thread map : Ok
44: Synthesize cpu map : Ok
45: Synthesize stat config : Ok
46: Synthesize stat : Ok
47: Synthesize stat round : Ok
48: Synthesize attr update : Ok
49: Event times : Ok
50: Read backward ring buffer : Ok
51: Print cpu map : Ok
52: Merge cpu map : Ok
53: Probe SDT events : Ok
54: is_printable_array : Ok
55: Print bitmap : Ok
56: perf hooks : Ok
57: builtin clang support : Skip (not compiled in)
58: unit_number__scnprintf : Ok
59: mem2node : Ok
60: time utils : Ok
61: Test jit_write_elf : Ok
62: maps__merge_in : Ok
63: x86 rdpmc : Ok
64: Convert perf time to TSC : Ok
65: DWARF unwind : Ok
66: x86 instruction decoder - new instructions : Ok
67: Intel PT packet decoder : Ok
68: x86 bp modify : Ok
69: probe libc's inet_pton & backtrace it with ping : Ok
70: Use vfs_getname probe to get syscall args filenames : Ok
71: Add vfs_getname probe to get syscall args filenames : Ok
72: Check open filename arg using perf trace + vfs_getname: Ok
73: Zstd perf.data compression/decompression : Ok
# $ make -C tools/perf build-test
make: Entering directory '/home/acme/git/perf/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_clean_all_O: make clean all
make_no_libbpf_O: make NO_LIBBPF=1
make_no_newt_O: make NO_NEWT=1
make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
make_help_O: make help
make_with_clangllvm_O: make LIBCLANGLLVM=1
make_no_libelf_O: make NO_LIBELF=1
make_no_gtk2_O: make NO_GTK2=1
make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1 NO_LIBCAP=1
make_cscope_O: make cscope
make_no_libperl_O: make NO_LIBPERL=1
make_no_libpython_O: make NO_LIBPYTHON=1
make_no_libunwind_O: make NO_LIBUNWIND=1
make_install_O: make install
make_debug_O: make DEBUG=1
make_static_O: make LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1
make_tags_O: make tags
make_doc_O: make doc
make_no_libnuma_O: make NO_LIBNUMA=1
make_no_demangle_O: make NO_DEMANGLE=1
make_no_libbionic_O: make NO_LIBBIONIC=1
make_with_babeltrace_O: make LIBBABELTRACE=1
make_install_prefix_O: make install prefix=/tmp/krava
make_no_libaudit_O: make NO_LIBAUDIT=1
make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_no_auxtrace_O: make NO_AUXTRACE=1
make_pure_O: make
make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
make_install_bin_O: make install-bin
make_util_pmu_bison_o_O: make util/pmu-bison.o
make_util_map_o_O: make util/map.o
make_no_slang_O: make NO_SLANG=1
make_install_prefix_slash_O: make install prefix=/tmp/krava/
make_no_backtrace_O: make NO_BACKTRACE=1
make_perf_o_O: make perf.o
OK
make: Leaving directory '/home/acme/git/perf/tools/perf'
$Arnaldo Carvalho de Melo
maintainerPATCH 1/23 perf stat: Don't report a null stalled cycles per insn metric
From: Kim Phillips <[email protected]>
For data collected on machines with front end stalled cycles supported, such as found on modern AMD CPU families, commit 146540fb545b ("perf
stat: Always separate stalled cycles per insn") introduces a new line in CSV output with a leading comma that upsets some automated scripts. Scripts have to use "-e ex_ret_instr" to work around this issue, after upgrading to a version of perf with that commit.
We could add "if (have_frontend_stalled && !config->csv_sep)" to the not (total && avg) else clause, to emphasize that CSV users are usually scripts, and are written to do only what is needed, i.e., they wouldn't typically invoke "perf stat" without specifying an explicit event list.
But - let alone CSV output - why should users now tolerate a constant 0-reporting extra line in regular terminal output?:
BEFORE:
$ sudo perf stat --all-cpus -einstructions,cycles -- sleep 1
Performance counter stats for 'system wide':
181,110,981 instructions # 0.58 insn per cycle
# 0.00 stalled cycles per insn
309,876,469 cycles
1.002202582 seconds time elapsedThe user would not like to see the now permanent:
"0.00 stalled cycles per insn"
line fixture, as it gives no useful information.
So this patch removes the printing of the zeroed stalled cycles line altogether, almost reverting the very original commit fb4605ba47e7 ("perf stat: Check for frontend stalled for metrics"), which seems like it was written to normalize --metric-only column output of common Intel machines at the time: modern Intel machines have ceased to support the genericised frontend stalled metrics AFAICT.
AFTER:
$ sudo perf stat --all-cpus -einstructions,cycles -- sleep 1
Performance counter stats for 'system wide':
244,071,432 instructions # 0.69 insn per cycle
355,353,490 cycles
1.001862516 seconds time elapsedOutput behaviour when stalled cycles is indeed measured is not affected (BEFORE == AFTER):
$ sudo perf stat --all-cpus -einstructions,cycles,stalled-cycles-frontend -- sleep 1
Performance counter stats for 'system wide':
247,227,799 instructions # 0.63 insn per cycle
# 0.26 stalled cycles per insn
394,745,636 cycles
63,194,485 stalled-cycles-frontend # 16.01% frontend cycles idle
1.002079770 seconds time elapsed--- tools/perf/util/stat-shadow.c | 6 ------ 1 file changed, 6 deletions(-)
tools/perf/util/stat-shadow.c +0 -6
@@ -18,7 +18,6 @@* AGGR_NONE: Use matching CPU * AGGR_THREAD: Not supported? */ -static bool have_frontend_stalled;struct runtime_stat rt_stat;struct stats walltime_nsecs_stats;
@@ -144,7 +143,6 @@ void runtime_stat__exit(struct runtime_stat *st)void perf_stat__init_shadow_stats (void ) { - have_frontend_stalled =pmu_have_event ("cpu" ,"stalled-cycles-frontend" );runtime_stat__init (&rt_stat); }
@@ -853,10 +851,6 @@ void perf_stat__print_shadow_stats(struct perf_stat_config *config,print_metric (config, ctxp,NULL ,"%7.2f " ,"stalled cycles per insn" , ratio); - }else if (have_frontend_stalled) { - out->new_line (config, ctxp); -print_metric (config, ctxp,NULL ,"%7.2f " , -"stalled cycles per insn" ,0 ); } }else if (perf_evsel__match (evsel,HARDWARE ,HW_BRANCH_MISSES )) {if (runtime_stat_n (st,STAT_BRANCHES , ctx, cpu) !=0 )
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 2/23 perf symbols: Update the list of kernel idle symbols
In reply to Arnaldo Carvalho de MeloFrom: Kim Phillips <[email protected]>
The "acpi_idle_do_entry", "acpi_processor_ffh_cstate_enter", and "idle_cpu" symbols appear in 'perf top' output, at least on AMD systems.
Add them to perf's idle_symbols list, so they don't dominate 'perf top' output.
--- tools/perf/util/symbol.c | 3 +++ 1 file changed, 3 insertions(+)
tools/perf/util/symbol.c +3 -0
@@ -635,9 +635,12 @@ int modules__parse(const char *filename, void *arg,static bool symbol__is_idle (const char *name) {const char *const idle_symbols[] = { +"acpi_idle_do_entry" , +"acpi_processor_ffh_cstate_enter" ,"arch_cpu_idle" ,"cpu_idle" ,"cpu_startup_entry" , +"idle_cpu" ,"intel_idle" ,"default_idle" ,"native_safe_halt" ,
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 3/23 perf symbols: Convert symbol__is_idle() to use strlist
In reply to Arnaldo Carvalho de MeloFrom: Kim Phillips <[email protected]>
Use the more optimized strlist implementation to do the idle function lookup.
--- tools/perf/util/symbol.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
tools/perf/util/symbol.c +9 -5
@@ -654,13 +654,17 @@ static bool symbol__is_idle(const char *name)NULL };int i; +static struct strlist *idle_symbols_list; -for (i =0 ; idle_symbols[i]; i++) { -if (!strcmp (idle_symbols[i], name)) -return true; - } +if (idle_symbols_list) +return strlist__has_entry (idle_symbols_list, name); -return false; + idle_symbols_list =strlist__new (NULL ,NULL ); + +for (i =0 ; idle_symbols[i]; i++) +strlist__add (idle_symbols_list, idle_symbols[i]); + +return strlist__has_entry (idle_symbols_list, name); } static int map__process_kallsym_symbol(void *arg, const char *name,
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 4/23 tools include UAPI: Sync x86's syscalls_64.tbl, generic unistd.h and fcntl.h to pick up openat2 and pidfd_getfd
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
fddb5d430ad9 ("open: introduce openat2(2) syscall") 9a2cef09c801 ("arch: wire up pidfd_getfd syscall")
We also need to grab a copy of uapi/linux/openat2.h since it is now needed by fcntl.h, add it to tools/perf/check_headers.h.
$ diff -u tools/perf/arch/x86/entry/syscalls/syscall_64.tbl arch/x86/entry/syscalls/syscall_64.tbl --- tools/perf/arch/x86/entry/syscalls/syscall_64.tbl 2019-12-20 16:43:57.662429958 -0300 +++ arch/x86/entry/syscalls/syscall_64.tbl 2020-02-10 16:36:22.070012468 -0300 @@ -357,6 +357,8 @@ 433 common fspick __x64_sys_fspick 434 common pidfd_open __x64_sys_pidfd_open 435 common clone3 __x64_sys_clone3/ptregs +437 common openat2 __x64_sys_openat2 +438 common pidfd_getfd __x64_sys_pidfd_getfd
#
# x32-specific system call numbers start at 512 to avoid cache impact $
Update tools/'s copy of that file:
$ cp arch/x86/entry/syscalls/syscall_64.tbl tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
See the result:
$ diff -u /tmp/build/perf/arch/x86/include/generated/asm/syscalls_64.c.before /tmp/build/perf/arch/x86/include/generated/asm/syscalls_64.c --- /tmp/build/perf/arch/x86/include/generated/asm/syscalls_64.c.before 2020-02-10 16:42:59.010636041 -0300 +++ /tmp/build/perf/arch/x86/include/generated/asm/syscalls_64.c 2020-02-10 16:43:24.149958337 -0300 @@ -346,5 +346,7 @@ [433] = "fspick", [434] = "pidfd_open", [435] = "clone3", + [437] = "openat2", + [438] = "pidfd_getfd", }; -#define SYSCALLTBL_x86_64_MAX_ID 435 +#define SYSCALLTBL_x86_64_MAX_ID 438 $
Now one can use:
perf trace -e openat2,pidfd_getfd
To get just those syscalls or use in things like:
perf trace -e open*
To get all the open variant (open, openat, openat2, etc) or:
perf trace pidfd*
To get the pidfd syscalls.
--- tools/include/uapi/asm-generic/unistd.h | 7 +++- tools/include/uapi/linux/fcntl.h | 2 +- tools/include/uapi/linux/openat2.h | 39 +++++++++++++++++++ .../arch/x86/entry/syscalls/syscall_64.tbl | 2 + tools/perf/check-headers.sh | 1 + 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 tools/include/uapi/linux/openat2.h
tools/include/uapi/asm-generic/unistd.h +6 -1
@@ -851,8 +851,13 @@ __SYSCALL(__NR_pidfd_open, sys_pidfd_open) __SYSCALL(__NR_clone3, sys_clone3)#endif +#define __NR_openat2 437 +__SYSCALL(__NR_openat2, sys_openat2) +#define __NR_pidfd_getfd 438 +__SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd) +#undef __NR_syscalls -#define __NR_syscalls 436 +#define __NR_syscalls 439/* * 32 bit systems traditionally used different
tools/include/uapi/linux/fcntl.h +1 -1
@@ -3,6 +3,7 @@#define _UAPI_LINUX_FCNTL_H#include <asm/fcntl.h> +#include <linux/openat2.h> #define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0)#define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1)
@@ -100,5 +101,4 @@#define AT_RECURSIVE 0x8000/* Apply to the entire subtree */ -#endif /* _UAPI_LINUX_FCNTL_H */
tools/include/uapi/linux/openat2.h new file +39 -0
@@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _UAPI_LINUX_OPENAT2_H +#define _UAPI_LINUX_OPENAT2_H + +#include <linux/types.h> + +/* +* Arguments for how openat2(2) should open the target path. If only @flags and +* @mode are non-zero, then openat2(2) operates very similarly to openat(2). +* +* However, unlike openat(2), unknown or invalid bits in @flags result in +* -EINVAL rather than being silently ignored. @mode must be zero unless one of +* {O_CREAT, O_TMPFILE} are set. +* +* @flags: O_* flags. +* @mode: O_CREAT/O_TMPFILE file mode. +* @resolve: RESOLVE_* flags. +*/ +struct open_how { +__u64 flags; +__u64 mode; +__u64 resolve; +}; + +/* how->resolve flags for openat2(2). */ +#define RESOLVE_NO_XDEV 0x01/* Block mount-point crossings +(includes bind-mounts). */ +#define RESOLVE_NO_MAGICLINKS 0x02/* Block traversal through procfs-style +"magic-links". */ +#define RESOLVE_NO_SYMLINKS 0x04/* Block traversal through all symlinks +(implies OEXT_NO_MAGICLINKS) */ +#define RESOLVE_BENEATH 0x08/* Block "lexical" trickery like +"..", symlinks, and absolute +paths which escape the dirfd. */ +#define RESOLVE_IN_ROOT 0x10/* Make all jumps to "/" and ".." +be scoped inside the dirfd +(similar to chroot(2)). */ + +#endif /* _UAPI_LINUX_OPENAT2_H */
tools/perf/arch/x86/entry/syscalls/syscall_64.tbl +2 -0
@@ -357,6 +357,8 @@ 433 common fspick __x64_sys_fspick 434 common pidfd_open __x64_sys_pidfd_open 435 common clone3 __x64_sys_clone3/ptregs +437 common openat2 __x64_sys_openat2 +438 common pidfd_getfd __x64_sys_pidfd_getfd # # x32-specific system call numbers start at 512 to avoid cache impact
tools/perf/check-headers.sh +1 -0
@@ -13,6 +13,7 @@ include/uapi/linux/kcmp.h include/uapi/linux/kvm.h include/uapi/linux/in.h include/uapi/linux/mount.h +include/uapi/linux/openat2.h include/uapi/linux/perf_event.h include/uapi/linux/prctl.h include/uapi/linux/sched.h
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 5/23 perf maps: Mark module DSOs with kernel type
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
We add kernel module map into machine->kmaps, so it needs to be created as 'struct kmap', which is dependent on its dso having kernel type.
--- tools/perf/util/machine.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/util/machine.c +1 -0
@@ -686,6 +686,7 @@ static struct dso *machine__findnew_module_dso(struct machine *machine,dso__set_module_info (dso, m, machine);dso__set_long_name (dso,strdup (filename), true); + dso->kernel =DSO_TYPE_KERNEL ; }dso__get (dso);
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 6/23 perf maps: Mark ksymbol DSOs with kernel type
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
We add ksymbol map into machine->kmaps, so it needs to be created as 'struct kmap', which is dependent on its dso having kernel type.
--- tools/perf/util/machine.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
tools/perf/util/machine.c +10 -2
@@ -727,9 +727,17 @@ static int machine__process_ksymbol_register(struct machine *machine,struct map *map =maps__find (&machine->kmaps, event->ksymbol.addr);if (!map) { - map =dso__new_map (event->ksymbol.name); -if (!map) +struct dso *dso =dso__new (event->ksymbol.name); + +if (dso) { + dso->kernel =DSO_TYPE_KERNEL ; + map =map__new2 (0 , dso); + } + +if (!dso || !map) { +dso__put (dso);return -ENOMEM ; + } map->start = event->ksymbol.addr; map->end = map->start + event->ksymbol.len;
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 7/23 perf maps: Fix map__clone() for struct kmap
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
The map__clone() function can be called on kernel maps as well, so it needs to duplicate the whole kmap data.
--- tools/perf/util/map.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
tools/perf/util/map.c +6 -1
@@ -375,8 +375,13 @@ struct symbol *map__find_symbol_by_name(struct map *map, const char *name)struct map *map__clone (struct map *from) { -struct map *map =memdup (from,sizeof (*map)); +size_t size =sizeof (struct map ); +struct map *map; + +if (from->dso && from->dso->kernel) + size +=sizeof (struct kmap ); + map =memdup (from, size);if (map !=NULL ) {refcount_set (&map->refcnt,1 );RB_CLEAR_NODE (&map->rb_node);
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 8/23 perf maps: Move kmap::kmaps setup to maps__insert()
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
So the kmaps pointer setup is centralized and we do not need to update it in all those places (2 current places and few more missing) after calling maps__insert().
--- tools/perf/util/machine.c | 13 +------------ tools/perf/util/map.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 12 deletions(-)
tools/perf/util/machine.c +1 -12
@@ -981,7 +981,6 @@ int machine__create_extra_kernel_map(struct machine *machine, kmap =map__kmap (map); - kmap->kmaps = &machine->kmaps;strlcpy (kmap->name, xm->name,KMAP_NAME_LEN );maps__insert (&machine->kmaps, map);
@@ -1091,9 +1090,6 @@ int __weak machine__create_extra_kernel_maps(struct machine *machine __maybe_unustatic int __machine__create_kernel_maps (struct machine *machine,struct dso *kernel) { -struct kmap *kmap; -struct map *map; -/* In case of renewal the kernel map, destroy previous one */ machine__destroy_kernel_maps (machine);
@@ -1102,14 +1098,7 @@ __machine__create_kernel_maps(struct machine *machine, struct dso *kernel)return -1 ; machine->vmlinux_map->map_ip = machine->vmlinux_map->unmap_ip = identity__map_ip; - map =machine__kernel_map (machine); - kmap =map__kmap (map); -if (!kmap) -return -1 ; - - kmap->kmaps = &machine->kmaps; -maps__insert (&machine->kmaps, map); - +maps__insert (&machine->kmaps, machine->vmlinux_map);return 0 ; }
tools/perf/util/map.c +10 -0
@@ -543,6 +543,16 @@ void maps__insert(struct maps *maps, struct map *map)__maps__insert (maps, map); ++maps->nr_maps; +if (map->dso && map->dso->kernel) { +struct kmap *kmap =map__kmap (map); + +if (kmap) + kmap->kmaps = maps; +else +pr_err ("Internal error: kernel dso with non kernel map\n" ); + } + +/* * If we already performed some search by name, then we need to add the just * inserted map and resort.
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 9/23 tools headers UAPI: Sync copy of arm64's asm/unistd.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To get the changes in:
3e3c8ca5a351 ("arm64: Move __ARCH_WANT_SYS_CLONE3 definition to uapi headers")
Silencing this tools/perf/ build warning:
Warning: Kernel ABI header at 'tools/arch/arm64/include/uapi/asm/unistd.h' differs from latest version at 'arch/arm64/include/uapi/asm/unistd.h' diff -u tools/arch/arm64/include/uapi/asm/unistd.h arch/arm64/include/uapi/asm/unistd.h
Which will probably end up enabling the use of "clone3" in 'perf trace -e', haven't checked the build with this change on an arm64 system.
--- tools/arch/arm64/include/uapi/asm/unistd.h | 1 + 1 file changed, 1 insertion(+)
tools/arch/arm64/include/uapi/asm/unistd.h +1 -0
@@ -19,5 +19,6 @@#define __ARCH_WANT_NEW_STAT#define __ARCH_WANT_SET_GET_RLIMIT#define __ARCH_WANT_TIME32_SYSCALLS +#define __ARCH_WANT_SYS_CLONE3#include <asm-generic/unistd.h>
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 10/23 tools headers UAPI: Sync prctl.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To get the changes in:
8d19f1c8e193 ("prctl: PR_{G,S}ET_IO_FLUSHER to support controlling memory reclaim")
Which ends up having this effect in tooling, i.e. the addition of the support to those prctl's options:
$ tools/perf/trace/beauty/prctl_option.sh > before
$ cp include/uapi/linux/prctl.h tools/include/uapi/linux/prctl.h
$ git diff
diff --git a/tools/include/uapi/linux/prctl.h b/tools/include/uapi/linux/prctl.h
index 7da1b37b27aa..07b4f8131e36 100644
--- a/tools/include/uapi/linux/prctl.h
+++ b/tools/include/uapi/linux/prctl.h
@@ -234,4 +234,8 @@ struct prctl_mm_map {
#define PR_GET_TAGGED_ADDR_CTRL 56
# define PR_TAGGED_ADDR_ENABLE (1UL << 0) +/* Control reclaim behavior when allocating memory */
+#define PR_SET_IO_FLUSHER 57
+#define PR_GET_IO_FLUSHER 58
+
#endif /* _LINUX_PRCTL_H */
$ tools/perf/trace/beauty/prctl_option.sh > after
$ diff -u before after
--- before 2020-02-11 15:24:35.339289912 -0300
+++ after 2020-02-11 15:24:56.319711315 -0300
@@ -51,6 +51,8 @@
[54] = "PAC_RESET_KEYS",
[55] = "SET_TAGGED_ADDR_CTRL",
[56] = "GET_TAGGED_ADDR_CTRL",
+ [57] = "SET_IO_FLUSHER",
+ [58] = "GET_IO_FLUSHER",
};
static const char *prctl_set_mm_options[] = {
[1] = "START_CODE",
$--- tools/include/uapi/linux/prctl.h | 4 ++++ 1 file changed, 4 insertions(+)
tools/include/uapi/linux/prctl.h +4 -0
@@ -234,4 +234,8 @@ struct prctl_mm_map {#define PR_GET_TAGGED_ADDR_CTRL 56# define PR_TAGGED_ADDR_ENABLE (1UL << 0) +/* Control reclaim behavior when allocating memory */ +#define PR_SET_IO_FLUSHER 57 +#define PR_GET_IO_FLUSHER 58 +#endif /* _LINUX_PRCTL_H */
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 11/23 perf beauty prctl: Export the 'options' strarray
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
So that we can use it with strtoul, allowing string to number conversions in filter expressions.
--- tools/perf/trace/beauty/beauty.h | 2 ++ tools/perf/trace/beauty/prctl.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-)
tools/perf/trace/beauty/beauty.h +2 -0
@@ -213,6 +213,8 @@ size_t syscall_arg__scnprintf_x86_arch_prctl_code(char *bf, size_t size, structsize_t syscall_arg__scnprintf_prctl_option (char *bf,size_t size,struct syscall_arg *arg);#define SCA_PRCTL_OPTION syscall_arg__scnprintf_prctl_option +extern struct strarray strarray__prctl_options; +size_t syscall_arg__scnprintf_prctl_arg2 (char *bf,size_t size,struct syscall_arg *arg);#define SCA_PRCTL_ARG2 syscall_arg__scnprintf_prctl_arg2
tools/perf/trace/beauty/prctl.c +2 -1
@@ -11,9 +11,10 @@#include "trace/beauty/generated/prctl_option_array.c" +DEFINE_STRARRAY (prctl_options,"PR_" ); +static size_t prctl__scnprintf_option (int option,char *bf,size_t size,bool show_prefix) { - static DEFINE_STRARRAY(prctl_options, "PR_");return strarray__scnprintf (&strarray__prctl_options, bf, size,"%d" , show_prefix, option); }
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 12/23 perf trace: Resolve prctl's 'option' arg strings to numbers
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
# perf trace -e syscalls:sys_enter_prctl --filter="option==SET_NAME"
0.000 Socket Thread/3860 syscalls:sys_enter_prctl(option: SET_NAME, arg2: 0x7fc50b9733e8)
0.053 SSL Cert #78/3860 syscalls:sys_enter_prctl(option: SET_NAME, arg2: 0x7fc50b9733e8)
^C #If one uses '-v' with 'perf trace', we can see the filter it puts in place:
New filter for syscalls:sys_enter_prctl: (option==0xf) && (common_pid != 3859 && common_pid != 2757)
We still need to allow using plain '-e prctl' and have this turn into creating a 'syscalls:sys_enter_prctl' event so that the filter can be applied only to it as right now '-e prctl' ends up using the 'raw_syscalls:sys_enter/sys_exit'.
The end goal is to have something like:
# perf trace -e prctl/option==SET_NAME/
And have that use tracepoint filters or eBPF ones.
--- tools/perf/builtin-trace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
tools/perf/builtin-trace.c +3 -1
@@ -1065,7 +1065,9 @@ static struct syscall_fmt syscall_fmts[] = { { .name = "poll", .timeout = true, }, { .name = "ppoll", .timeout = true, }, { .name = "prctl", - .arg = { [0] = { .scnprintf = SCA_PRCTL_OPTION, /* option */ }, + .arg = { [0] = { .scnprintf = SCA_PRCTL_OPTION, /* option */ + .strtoul = STUL_STRARRAY, + .parm = &strarray__prctl_options, }, [1] = { .scnprintf = SCA_PRCTL_ARG2, /* arg2 */ }, [2] = { .scnprintf = SCA_PRCTL_ARG3, /* arg3 */ }, }, }, { .name = "pread", .alias = "pread64", },
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 13/23 tools headers UAPI: Sync sched.h with the kernel
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To get the changes in:
769071ac9f20 ("ns: Introduce Time Namespace")
Silencing this tools/perf build warning:
Warning: Kernel ABI header at 'tools/include/uapi/linux/sched.h' differs from latest version at 'include/uapi/linux/sched.h' diff -u tools/include/uapi/linux/sched.h include/uapi/linux/sched.h
Which enables 'perf trace' to decode the CLONE_NEWTIME bit in the 'flags' argument to the clone syscalls.
Example of clone flags being decoded:
[root@quaco ~]# perf trace -e clone*
0.000 qemu-system-x8/23923 clone(clone_flags: VM|FS|FILES|SIGHAND|THREAD|SYSVSEM|SETTLS|PARENT_SETTID|CHILD_CLEARTID, newsp: 0x7f0dad7f9870, parent_tidptr: 0x7f0dad7fa9d0, child_tidptr: 0x7f0dad7fa9d0, tls: 0x7f0dad7fa700) = 6806 (qemu-system-x86)
? qemu-system-x8/6806 ... [continued]: clone()) = 0^C[root@quaco ~]#
At some point this should enable things like:
# perf trace -e 'clone*/clone_flags&NEWTIME/'
--- tools/include/uapi/linux/sched.h | 6 ++++++ 1 file changed, 6 insertions(+)
tools/include/uapi/linux/sched.h +6 -0
@@ -36,6 +36,12 @@/* Flags for the clone3() syscall. */ #define CLONE_CLEAR_SIGHAND 0x100000000ULL/* Clear any signal handler and reset to SIG_DFL. */ +/* +* cloning flags intersect with CSIGNAL so can be used with unshare and clone3 +* syscalls only: +*/ +#define CLONE_NEWTIME 0x00000080/* New time namespace */ +#ifndef __ASSEMBLY__/** * struct clone_args - arguments for the clone3 syscall
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 14/23 tools headers uapi: Sync linux/fscrypt.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick the changes from:
e933adde6f97 ("fscrypt: include <linux/ioctl.h> in UAPI header") 93edd392cad7 ("fscrypt: support passing a keyring key to FS_IOC_ADD_ENCRYPTION_KEY")
That don't trigger any changes in tooling.
This silences this perf build warning:
Warning: Kernel ABI header at 'tools/include/uapi/linux/fscrypt.h' differs from latest version at 'include/uapi/linux/fscrypt.h' diff -u tools/include/uapi/linux/fscrypt.h include/uapi/linux/fscrypt.h
--- tools/include/uapi/linux/fscrypt.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
tools/include/uapi/linux/fscrypt.h +13 -1
@@ -8,6 +8,7 @@#ifndef _UAPI_LINUX_FSCRYPT_H#define _UAPI_LINUX_FSCRYPT_H +#include <linux/ioctl.h> #include <linux/types.h> /* Encryption policy flags */
@@ -109,11 +110,22 @@ struct fscrypt_key_specifier { } u; }; +/* +* Payload of Linux keyring key of type "fscrypt-provisioning", referenced by +* fscrypt_add_key_arg::key_id as an alternative to fscrypt_add_key_arg::raw. +*/ +struct fscrypt_provisioning_key_payload { +__u32 type; +__u32 __reserved; +__u8 raw[]; +}; +/* Struct passed to FS_IOC_ADD_ENCRYPTION_KEY */ struct fscrypt_add_key_arg {struct fscrypt_key_specifier key_spec;__u32 raw_size; -__u32 __reserved[9 ]; +__u32 key_id; +__u32 __reserved[8 ];__u8 raw[]; };
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 15/23 tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick the change in:
cc662126b413 ("drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET")
That don't result in any changes in tooling, just silences this perf build warning:
Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h' diff -u tools/include/uapi/drm/i915_drm.h include/uapi/drm/i915_drm.h
--- tools/include/uapi/drm/i915_drm.h | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
tools/include/uapi/drm/i915_drm.h +32 -0
@@ -395,6 +395,7 @@ typedef struct _drm_i915_sarea {#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt) +#define DRM_IOCTL_I915_GEM_MMAP_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_offset)#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain)#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish)#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
@@ -793,6 +794,37 @@ struct drm_i915_gem_mmap_gtt {__u64 offset; }; +struct drm_i915_gem_mmap_offset { +/** Handle for the object being mapped. */ +__u32 handle; +__u32 pad; +/** +* Fake offset to use for subsequent mmap call +* +* This is a fixed-size type for 32/64 compatibility. +*/ +__u64 offset; + +/** +* Flags for extended behaviour. +* +* It is mandatory that one of the MMAP_OFFSET types +* (GTT, WC, WB, UC, etc) should be included. +*/ +__u64 flags; +#define I915_MMAP_OFFSET_GTT 0 +#define I915_MMAP_OFFSET_WC 1 +#define I915_MMAP_OFFSET_WB 2 +#define I915_MMAP_OFFSET_UC 3 + +/* +* Zero-terminated chain of extensions. +* +* No current extensions defined; mbz. +*/ +__u64 extensions; +}; +struct drm_i915_gem_set_domain {/** Handle for the object */ __u32 handle;
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 16/23 perf tools: Add arm64 version of get_cpuid()
In reply to Arnaldo Carvalho de MeloFrom: John Garry <[email protected]>
Add an arm64 version of get_cpuid(), which is used for various annotation and headers - for example, I now get the CPUID in "perf report --header", as shown in this snippet:
# hostname : ubuntu # os release : 5.5.0-rc1-dirty # perf version : 5.5.rc1.gbf8a13dc9851 # arch : aarch64 # nrcpus online : 96 # nrcpus avail : 96 # cpuid : 0x00000000480fd010
Since much of the code to read the MIDR is already in get_cpuid_str(), factor out this code.
Tester notes:
I tested this patch on my new ARM64 Kunpeng 920 server. [root@node1 zsk]# ./perf --version
perf version 5.6.rc1.g2cdb955b7252
Both perf list and perf stat can work.
--- tools/perf/arch/arm64/util/header.c | 63 ++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 15 deletions(-)
tools/perf/arch/arm64/util/header.c +48 -15
@@ -1,8 +1,10 @@#include <stdio.h> #include <stdlib.h> #include <perf/cpumap.h> +#include <util/cpumap.h> #include <internal/cpumap.h> #include <api/fs/fs.h> +#include <errno.h> #include "debug.h" #include "header.h"
@@ -12,26 +14,21 @@#define MIDR_VARIANT_SHIFT 20#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) -char *get_cpuid_str (struct perf_pmu *pmu) +static int _get_cpuid (char *buf,size_t sz,struct perf_cpu_map *cpus) { -char *buf =NULL ; -char path[PATH_MAX ];const char *sysfs =sysfs__mountpoint (); -int cpu;u64 midr =0 ; -struct perf_cpu_map *cpus; -FILE *file; +int cpu; -if (!sysfs || !pmu || !pmu->cpus) -return NULL ; +if (!sysfs || sz <MIDR_SIZE ) +return EINVAL ; - buf =malloc (MIDR_SIZE ); -if (!buf) -return NULL ; + cpus =perf_cpu_map__get (cpus); -/* read midr from list of cpus mapped to this pmu */ - cpus =perf_cpu_map__get (pmu->cpus);for (cpu =0 ; cpu <perf_cpu_map__nr (cpus); cpu++) { +char path[PATH_MAX ]; +FILE *file; +scnprintf (path,PATH_MAX ,"%s/devices/system/cpu/cpu%d" MIDR , sysfs, cpus->map[cpu]);
@@ -57,12 +54,48 @@ char *get_cpuid_str(struct perf_pmu *pmu)break ; } -if (!midr) { +perf_cpu_map__put (cpus); + +if (!midr) +return EINVAL ; + +return 0 ; +} + +int get_cpuid (char *buf,size_t sz) +{ +struct perf_cpu_map *cpus =perf_cpu_map__new (NULL ); +int ret; + +if (!cpus) +return EINVAL ; + + ret =_get_cpuid (buf, sz, cpus); + +perf_cpu_map__put (cpus); + +return ret; +} + +char *get_cpuid_str (struct perf_pmu *pmu) +{ +char *buf =NULL ; +int res; + +if (!pmu || !pmu->cpus) +return NULL ; + + buf =malloc (MIDR_SIZE ); +if (!buf) +return NULL ; + +/* read midr from list of cpus mapped to this pmu */ + res =_get_cpuid (buf,MIDR_SIZE , pmu->cpus); +if (res) {pr_err ("failed to get cpuid string for PMU %s\n" , pmu->name);free (buf); buf =NULL ; } -perf_cpu_map__put (cpus);return buf; }
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 17/23 tools headers UAPI: Sync asm-generic/mman-common.h with the kernel
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick the changes from:
d41938d2cbee ("mm: Reserve asm-generic prot flags 0x10 and 0x20 for arch use")
No changes in tooling, just a rebuild as files needed got touched.
This addresses the following perf build warning:
Warning: Kernel ABI header at 'tools/include/uapi/asm-generic/mman-common.h' differs from latest version at 'include/uapi/asm-generic/mman-common.h' diff -u tools/include/uapi/asm-generic/mman-common.h include/uapi/asm-generic/mman-common.h
--- tools/include/uapi/asm-generic/mman-common.h | 2 ++ 1 file changed, 2 insertions(+)
tools/include/uapi/asm-generic/mman-common.h +2 -0
@@ -11,6 +11,8 @@#define PROT_WRITE 0x2/* page can be written */ #define PROT_EXEC 0x4/* page can be executed */ #define PROT_SEM 0x8/* page may be used for atomic ops */ +/* 0x10 reserved for arch-specific use */ +/* 0x20 reserved for arch-specific use */ #define PROT_NONE 0x0/* page can not be accessed */ #define PROT_GROWSDOWN 0x01000000/* mprotect flag: extend change to start of growsdown vma */ #define PROT_GROWSUP 0x02000000/* mprotect flag: extend change to end of growsup vma */
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 18/23 tools include UAPI: Sync sound/asound.h copy
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Picking the changes from:
46b770f720bd ("ALSA: uapi: Fix sparse warning")
a103a3989993 ("ALSA: control: Fix incompatible protocol error") bd3eb4e87eb3 ("ALSA: ctl: bump protocol version up to v2.1.0") ff16351e3f30 ("ALSA: ctl: remove dimen member from elem_info structure") 542283566679 ("ALSA: ctl: remove unused macro for timestamping of elem_value") 7fd7d6c50451 ("ALSA: uapi: Fix typos and header inclusion in asound.h") 1cfaef961703 ("ALSA: bump uapi version numbers")
80fe7430c708 ("ALSA: add new 32-bit layout for snd_pcm_mmap_status/control") 07094ae6f952 ("ALSA: Avoid using timespec for struct snd_timer_tread") d9e5582c4bb2 ("ALSA: Avoid using timespec for struct snd_rawmidi_status") 3ddee7f88aaf ("ALSA: Avoid using timespec for struct snd_pcm_status") a4e7dd35b9da ("ALSA: Avoid using timespec for struct snd_ctl_elem_value") a07804cc7472 ("ALSA: Avoid using timespec for struct snd_timer_status")
Which entails no changes in the tooling side.
To silence this perf tools build warning:
Warning: Kernel ABI header at 'tools/include/uapi/sound/asound.h' differs from latest version at 'include/uapi/sound/asound.h' diff -u tools/include/uapi/sound/asound.h include/uapi/sound/asound.h
--- tools/include/uapi/sound/asound.h | 155 +++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 23 deletions(-)
tools/include/uapi/sound/asound.h +132 -23
@@ -26,7 +26,9 @@#if defined(__KERNEL__) || defined(__linux__)#include <linux/types.h> +#include <asm/byteorder.h> #else +#include <endian.h> #include <sys/ioctl.h> #endif
@@ -154,7 +156,7 @@ struct snd_hwdep_dsp_image {* * *****************************************************************************/ -#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14) +#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 15)typedef unsigned long snd_pcm_uframes_t ;typedef signed long snd_pcm_sframes_t ;
@@ -301,7 +303,9 @@ typedef int __bitwise snd_pcm_subformat_t;#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000/* internal kernel flag - trigger in drain */ #define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000/* internal kernel flag - FIFO size is in frames */ - +#if (__BITS_PER_LONG ==32 && defined(__USE_TIME_BITS64)) || defined __KERNEL__ +#define __SND_STRUCT_TIME64 +#endif typedef int __bitwise snd_pcm_state_t ;#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0)/* stream is open */
@@ -317,8 +321,17 @@ typedef int __bitwise snd_pcm_state_t;enum {SNDRV_PCM_MMAP_OFFSET_DATA =0x00000000 , -SNDRV_PCM_MMAP_OFFSET_STATUS =0x80000000 , -SNDRV_PCM_MMAP_OFFSET_CONTROL =0x81000000 , +SNDRV_PCM_MMAP_OFFSET_STATUS_OLD =0x80000000 , +SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD =0x81000000 , +SNDRV_PCM_MMAP_OFFSET_STATUS_NEW =0x82000000 , +SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW =0x83000000 , +#ifdef __SND_STRUCT_TIME64 +SNDRV_PCM_MMAP_OFFSET_STATUS =SNDRV_PCM_MMAP_OFFSET_STATUS_NEW , +SNDRV_PCM_MMAP_OFFSET_CONTROL =SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW , +#else +SNDRV_PCM_MMAP_OFFSET_STATUS =SNDRV_PCM_MMAP_OFFSET_STATUS_OLD , +SNDRV_PCM_MMAP_OFFSET_CONTROL =SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD , +#endif };union snd_pcm_sync_id {
@@ -456,8 +469,13 @@ enum {SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST =SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED }; +#ifndef __KERNEL__ +/* explicit padding avoids incompatibility between i386 and x86-64 */ +typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)]; } __time_pad; + struct snd_pcm_status { snd_pcm_state_t state; /* stream state */ + __time_pad pad1; /* align to timespec */ struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */ struct timespec tstamp; /* reference timestamp */ snd_pcm_uframes_t appl_ptr; /* appl ptr */
@@ -473,17 +491,48 @@ struct snd_pcm_status {__u32 audio_tstamp_accuracy;/* in ns units, only valid if indicated in audio_tstamp_data */ unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */ }; +#endif + +/* +* For mmap operations, we need the 64-bit layout, both for compat mode, +* and for y2038 compatibility. For 64-bit applications, the two definitions +* are identical, so we keep the traditional version. +*/ +#ifdef __SND_STRUCT_TIME64 +#define __snd_pcm_mmap_status64 snd_pcm_mmap_status +#define __snd_pcm_mmap_control64 snd_pcm_mmap_control +#define __snd_pcm_sync_ptr64 snd_pcm_sync_ptr +#ifdef __KERNEL__ +#define __snd_timespec64 __kernel_timespec +#else +#define __snd_timespec64 timespec +#endif +struct __snd_timespec { +__s32 tv_sec; +__s32 tv_nsec; +}; +#else +#define __snd_pcm_mmap_status snd_pcm_mmap_status +#define __snd_pcm_mmap_control snd_pcm_mmap_control +#define __snd_pcm_sync_ptr snd_pcm_sync_ptr +#define __snd_timespec timespec +struct __snd_timespec64 { +__s64 tv_sec; +__s64 tv_nsec; +}; -struct snd_pcm_mmap_status { +#endif + +struct __snd_pcm_mmap_status {snd_pcm_state_t state;/* RO: state - SNDRV_PCM_STATE_XXXX */ int pad1;/* Needed for 64 bit alignment */ snd_pcm_uframes_t hw_ptr;/* RO: hw ptr (0...boundary-1) */ -struct timespec tstamp;/* Timestamp */ +struct __snd_timespec tstamp;/* Timestamp */ snd_pcm_state_t suspended_state;/* RO: suspended stream state */ -struct timespec audio_tstamp;/* from sample counter or wall clock */ +struct __snd_timespec audio_tstamp;/* from sample counter or wall clock */ }; -struct snd_pcm_mmap_control { +struct __snd_pcm_mmap_control {snd_pcm_uframes_t appl_ptr;/* RW: appl ptr (0...boundary-1) */ snd_pcm_uframes_t avail_min;/* RW: min available frames for wakeup */ };
@@ -492,14 +541,59 @@ struct snd_pcm_mmap_control {#define SNDRV_PCM_SYNC_PTR_APPL (1<<1)/* get appl_ptr from driver (r/w op) */ #define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2)/* get avail_min from driver */ -struct snd_pcm_sync_ptr { +struct __snd_pcm_sync_ptr {unsigned int flags;union { -struct snd_pcm_mmap_status status; +struct __snd_pcm_mmap_status status; +unsigned char reserved[64 ]; + } s; +union { +struct __snd_pcm_mmap_control control; +unsigned char reserved[64 ]; + } c; +}; + +#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN) +typedef char __pad_before_uframe [sizeof (__u64) -sizeof (snd_pcm_uframes_t)]; +typedef char __pad_after_uframe [0 ]; +#endif + +#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN) +typedef char __pad_before_uframe [0 ]; +typedef char __pad_after_uframe [sizeof (__u64) -sizeof (snd_pcm_uframes_t)]; +#endif + +struct __snd_pcm_mmap_status64 { +snd_pcm_state_t state;/* RO: state - SNDRV_PCM_STATE_XXXX */ +__u32 pad1;/* Needed for 64 bit alignment */ +__pad_before_uframe __pad1; +snd_pcm_uframes_t hw_ptr;/* RO: hw ptr (0...boundary-1) */ +__pad_after_uframe __pad2; +struct __snd_timespec64 tstamp;/* Timestamp */ +snd_pcm_state_t suspended_state;/* RO: suspended stream state */ +__u32 pad3;/* Needed for 64 bit alignment */ +struct __snd_timespec64 audio_tstamp;/* sample counter or wall clock */ +}; + +struct __snd_pcm_mmap_control64 { +__pad_before_uframe __pad1; +snd_pcm_uframes_t appl_ptr;/* RW: appl ptr (0...boundary-1) */ +__pad_before_uframe __pad2; + +__pad_before_uframe __pad3; +snd_pcm_uframes_t avail_min;/* RW: min available frames for wakeup */ +__pad_after_uframe __pad4; +}; + +struct __snd_pcm_sync_ptr64 { +__u32 flags; +__u32 pad1; +union { +struct __snd_pcm_mmap_status64 status;unsigned char reserved[64 ]; } s;union { -struct snd_pcm_mmap_control control; +struct __snd_pcm_mmap_control64 control;unsigned char reserved[64 ]; } c; };
@@ -584,6 +678,8 @@ enum {#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) +#define __SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct __snd_pcm_sync_ptr) +#define __SNDRV_PCM_IOCTL_SYNC_PTR64 _IOWR('A', 0x23, struct __snd_pcm_sync_ptr64)#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status)#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
@@ -614,7 +710,7 @@ enum {* Raw MIDI section - /dev/snd/midi?? */ -#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0) +#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 1)enum {SNDRV_RAWMIDI_STREAM_OUTPUT =0 ,
@@ -648,13 +744,16 @@ struct snd_rawmidi_params {unsigned char reserved[16 ];/* reserved for future use */ }; +#ifndef __KERNEL__struct snd_rawmidi_status {int stream; +__time_pad pad1;struct timespec tstamp;/* Timestamp */ size_t avail;/* available bytes */ size_t xruns;/* count of overruns since last status (in bytes) */ unsigned char reserved[16 ];/* reserved for future use */ }; +#endif #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
@@ -667,7 +766,7 @@ struct snd_rawmidi_status {* Timer section - /dev/snd/timer */ -#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) +#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)enum {SNDRV_TIMER_CLASS_NONE =-1 ,
@@ -761,6 +860,7 @@ struct snd_timer_params {unsigned char reserved[60 ];/* reserved */ }; +#ifndef __KERNEL__ struct snd_timer_status { struct timespec tstamp; /* Timestamp - last update */ unsigned int resolution; /* current period resolution in ns */
@@ -769,10 +869,11 @@ struct snd_timer_status {unsigned int queue;/* used queue size */ unsigned char reserved[64]; /* reserved */ }; +#endif #define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) -#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) +#define SNDRV_TIMER_IOCTL_TREAD_OLD _IOW('T', 0x02, int)#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
@@ -785,6 +886,15 @@ struct snd_timer_status {#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) +#define SNDRV_TIMER_IOCTL_TREAD64 _IOW('T', 0xa4, int) + +#if __BITS_PER_LONG ==64 +#define SNDRV_TIMER_IOCTL_TREAD SNDRV_TIMER_IOCTL_TREAD_OLD +#else +#define SNDRV_TIMER_IOCTL_TREAD ((sizeof(__kernel_long_t) >= sizeof(time_t)) ? \ + SNDRV_TIMER_IOCTL_TREAD_OLD : \ + SNDRV_TIMER_IOCTL_TREAD64) +#endif struct snd_timer_read {unsigned int resolution;
@@ -810,11 +920,15 @@ enum { SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10, }; +#ifndef __KERNEL__struct snd_timer_tread {int event; +__time_pad pad1;struct timespec tstamp;unsigned int val; +__time_pad pad2; }; +#endif /**************************************************************************** * *
@@ -822,7 +936,7 @@ struct snd_timer_tread {* * ****************************************************************************/ -#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) +#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 8)struct snd_ctl_card_info {int card;/* card number */
@@ -860,7 +974,7 @@ typedef int __bitwise snd_ctl_elem_iface_t;#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2)/* control value may be changed without a notification */ -#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3)/* when was control changed */ +// (1 << 3) is unused. #define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4)/* TLV read is possible */ #define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5)/* TLV write is possible */ #define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
@@ -926,11 +1040,7 @@ struct snd_ctl_elem_info { } enumerated;unsigned char reserved[128 ]; } value; -union { -unsigned short d[4 ];/* dimensions */ -unsigned short *d_ptr;/* indirect - obsoleted */ - } dimen; -unsigned char reserved[64 -4 *sizeof (unsigned short )]; +unsigned char reserved[64 ]; };struct snd_ctl_elem_value {
@@ -955,8 +1065,7 @@ struct snd_ctl_elem_value { } bytes;struct snd_aes_iec958 iec958; } value;/* RO */ -struct timespec tstamp; -unsigned char reserved[128 -sizeof (struct timespec )]; +unsigned char reserved[128 ]; };struct snd_ctl_tlv {
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 19/23 tools headers x86: Sync disabled-features.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To silence the following tools/perf build warning:
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/disabled-features.h' differs from latest version at 'arch/x86/include/asm/disabled-features.h' diff -u tools/arch/x86/include/asm/disabled-features.h arch/x86/include/asm/disabled-features.h
Picking up the changes in:
45fc24e89b7c ("x86/mpx: remove MPX from arch/x86")
that didn't entail any functionality change in the tooling side.
--- tools/arch/x86/include/asm/disabled-features.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
tools/arch/x86/include/asm/disabled-features.h +1 -7
@@ -10,12 +10,6 @@* cpu_feature_enabled(). */ -#ifdef CONFIG_X86_INTEL_MPX -# define DISABLE_MPX 0 -#else -# define DISABLE_MPX (1<<(X86_FEATURE_MPX & 31)) -#endif -#ifdef CONFIG_X86_SMAP # define DISABLE_SMAP 0#else
@@ -74,7 +68,7 @@#define DISABLED_MASK6 0#define DISABLED_MASK7 (DISABLE_PTI)#define DISABLED_MASK8 0 -#define DISABLED_MASK9 (DISABLE_MPX|DISABLE_SMAP) +#define DISABLED_MASK9 (DISABLE_SMAP)#define DISABLED_MASK10 0#define DISABLED_MASK11 0#define DISABLED_MASK12 0
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 20/23 tools arch x86: Sync asm/cpufeatures.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick up the changes from:
85c17291e2eb ("x86/cpufeatures: Add flag to track whether MSR IA32_FEAT_CTL is configured") f444a5ff95dc ("x86/cpufeatures: Add support for fast short REP; MOVSB")
These don't cause any changes in tooling, just silences this perf build warning:
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h' diff -u tools/arch/x86/include/asm/cpufeatures.h arch/x86/include/asm/cpufeatures.h
--- tools/arch/x86/include/asm/cpufeatures.h | 2 ++ 1 file changed, 2 insertions(+)
tools/arch/x86/include/asm/cpufeatures.h +2 -0
@@ -220,6 +220,7 @@#define X86_FEATURE_ZEN ( 7*32+28)/* "" CPU is AMD family 0x17 (Zen) */ #define X86_FEATURE_L1TF_PTEINV ( 7*32+29)/* "" L1TF workaround PTE inversion */ #define X86_FEATURE_IBRS_ENHANCED ( 7*32+30)/* Enhanced IBRS */ +#define X86_FEATURE_MSR_IA32_FEAT_CTL ( 7*32+31)/* "" MSR IA32_FEAT_CTL configured */ /* Virtualization flags: Linux defined, word 8 */ #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0)/* Intel TPR Shadow */
@@ -357,6 +358,7 @@/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */ +#define X86_FEATURE_FSRM (18*32+ 4)/* Fast Short Rep Mov */ #define X86_FEATURE_AVX512_VP2INTERSECT (18*32+ 8)/* AVX-512 Intersect for D/Q */ #define X86_FEATURE_MD_CLEAR (18*32+10)/* VERW clears CPU buffers */ #define X86_FEATURE_TSX_FORCE_ABORT (18*32+13)/* "" TSX_FORCE_ABORT */
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 21/23 tools headers kvm: Sync kvm headers with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick up the changes from:
290a6bb06de9 ("arm64: KVM: Add UAPI notes for swapped registers")
No tools changes are caused by this.
This addresses these tools/perf build warnings:
--- tools/arch/arm64/include/uapi/asm/kvm.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
tools/arch/arm64/include/uapi/asm/kvm.h +10 -2
@@ -220,10 +220,18 @@ struct kvm_vcpu_events {#define KVM_REG_ARM_PTIMER_CVAL ARM64_SYS_REG(3, 3, 14, 2, 2)#define KVM_REG_ARM_PTIMER_CNT ARM64_SYS_REG(3, 3, 14, 0, 1) -/* EL0 Virtual Timer Registers */ +/* +* EL0 Virtual Timer Registers +* +* WARNING: +* KVM_REG_ARM_TIMER_CVAL and KVM_REG_ARM_TIMER_CNT are not defined +* with the appropriate register encodings. Their values have been +* accidentally swapped. As this is set API, the definitions here +* must be used, rather than ones derived from the encodings. +*/ #define KVM_REG_ARM_TIMER_CTL ARM64_SYS_REG(3, 3, 14, 3, 1) -#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2)#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2) +#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2)/* KVM-as-firmware specific pseudo-registers */ #define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 22/23 tools headers kvm: Sync linux/kvm.h with the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick up the changes from:
7de3f1423ff9 ("KVM: s390: Add new reset vcpu API")
So far we're ignoring those arch specific ioctls, we need to revisit this at some time to have arch specific tables, etc:
$ grep S390 tools/perf/trace/beauty/kvm_ioctl.sh egrep -v " ((ARM|PPC|S390)_|[GS]ET_(DEBUGREGS|PIT2|XSAVE|TSC_KHZ)|CREATE_SPAPR_TCE_64)" | \ $
This addresses these tools/perf build warnings:
Warning: Kernel ABI header at 'tools/arch/arm/include/uapi/asm/kvm.h' differs from latest version at 'arch/arm/include/uapi/asm/kvm.h' diff -u tools/arch/arm/include/uapi/asm/kvm.h arch/arm/include/uapi/asm/kvm.h
--- tools/include/uapi/linux/kvm.h | 5 +++++ 1 file changed, 5 insertions(+)
tools/include/uapi/linux/kvm.h +5 -0
@@ -1009,6 +1009,7 @@ struct kvm_ppc_resize_hpt {#define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176#define KVM_CAP_ARM_NISV_TO_USER 177#define KVM_CAP_ARM_INJECT_EXT_DABT 178 +#define KVM_CAP_S390_VCPU_RESETS 179#ifdef KVM_CAP_IRQ_ROUTING
@@ -1473,6 +1474,10 @@ struct kvm_enc_region {/* Available with KVM_CAP_ARM_SVE */ #define KVM_ARM_VCPU_FINALIZE _IOW(KVMIO, 0xc2, int) +/* Available with KVM_CAP_S390_VCPU_RESETS */ +#define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3) +#define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4) +/* Secure Encrypted Virtualization command */ enum sev_cmd_id {/* Guest initialization commands */
Signature · 1 line
2.21.1
Arnaldo Carvalho de Melo
maintainerPATCH 23/23 perf llvm: Fix script used to obtain kernel make directives to work with new kbuild
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Before this patch:
# ./perf test 39 41 39: LLVM search and compile : 39.1: Basic BPF llvm compile : Ok 39.2: kbuild searching : FAILED! 39.3: Compile source for BPF prologue generation : Skip 39.4: Compile source for BPF relocation : Skip 41: BPF filter : 41.1: Basic BPF filtering : Ok 41.2: BPF pinning : Ok 41.3: BPF prologue generation : FAILED! 41.4: BPF relocation checker : Skip #
Using 'perf test -v' for these tests shows that it is not finding uapi/linux/fs.h, which ends up being because we don't setup the right header path. Fix it.
After this patch:
# perf test 39 41 39: LLVM search and compile : 39.1: Basic BPF llvm compile : Ok 39.2: kbuild searching : Ok 39.3: Compile source for BPF prologue generation : Ok 39.4: Compile source for BPF relocation : Ok 41: BPF filter : 41.1: Basic BPF filtering : Ok 41.2: BPF pinning : Ok 41.3: BPF prologue generation : Ok 41.4: BPF relocation checker : Ok #
Longer description:
In llvm-utils.c we use some techniques to obtain the kbuild make directives and that recently stopped working as now 'ar' gets called and expects to find the dummy.o used to echo these variables:
$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS)
Add the $(CC) line to satisfy that, making sure this works with all kernels, i.e. preserving the temp directory and files in it used for this technique we can see that it works everywhere:
# make -s -C /lib/modules/5.4.18-100.fc30.x86_64/build M=/tmp/tmp.qgaFHgxjZ4/ clean
# ls -la /tmp/tmp.qgaFHgxjZ4/
total 4
drwx------. 2 root root 80 Feb 14 09:42 .
drwxrwxrwt. 47 root root 1200 Feb 14 09:42 ..
-rw-r--r--. 1 root root 0 Feb 13 17:14 dummy.c
-rw-r--r--. 1 root root 121 Feb 13 17:14 Makefile
#
# cat /tmp/tmp.qgaFHgxjZ4/Makefile
obj-y := dummy.o
$(obj)/%.o: $(src)/%.c
@echo -n "$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS)"
$(CC) -c -o $@ $<
#Then build with an old kernel Makefile:
# make -s -C /lib/modules/5.4.18-100.fc30.x86_64/build M=/tmp/tmp.qgaFHgxjZ4/ dummy.o -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/9/include -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h # # ls -la /tmp/tmp.qgaFHgxjZ4/ total 8 drwx------. 2 root root 100 Feb 14 09:43 . drwxrwxrwt. 47 root root 1200 Feb 14 09:43 .. -rw-r--r--. 1 root root 0 Feb 13 17:14 dummy.c -rw-r--r--. 1 root root 936 Feb 14 09:43 dummy.o -rw-r--r--. 1 root root 121 Feb 13 17:14 Makefile #
And a new one:
# make -s -C /lib/modules/5.4.18-100.fc30.x86_64/build M=/tmp/tmp.qgaFHgxjZ4/ clean # ls -la /tmp/tmp.qgaFHgxjZ4/ total 4 drwx------. 2 root root 80 Feb 14 09:43 . drwxrwxrwt. 47 root root 1200 Feb 14 09:43 .. -rw-r--r--. 1 root root 0 Feb 13 17:14 dummy.c -rw-r--r--. 1 root root 121 Feb 13 17:14 Makefile # make -s -C /lib/modules/5.6.0-rc1+/build M=/tmp/tmp.qgaFHgxjZ4/ dummy.o -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/9/include -I/home/acme/git/linux/arch/x86/include -I./arch/x86/include/generated -I/home/acme/git/linux/include -I./include -I/home/acme/git/linux/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/home/acme/git/linux/include/uapi -I./include/generated/uapi -include /home/acme/git/linux/include/linux/kconfig.h # # ls -la /tmp/tmp.qgaFHgxjZ4/ total 16 drwx------. 2 root root 160 Feb 14 09:44 . drwxrwxrwt. 47 root root 1200 Feb 14 09:44 .. -rw-r--r--. 1 root root 158 Feb 14 09:44 built-in.a -rw-r--r--. 1 root root 149 Feb 14 09:44 .built-in.a.cmd -rw-r--r--. 1 root root 0 Feb 13 17:14 dummy.c -rw-r--r--. 1 root root 936 Feb 14 09:44 dummy.o -rw-r--r--. 1 root root 121 Feb 13 17:14 Makefile -rw-r--r--. 1 root root 0 Feb 14 09:44 modules.order #
--- tools/perf/util/llvm-utils.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/util/llvm-utils.c +1 -0
@@ -288,6 +288,7 @@ static const char *kinc_fetch_script ="obj-y := dummy.o\n" "\\$(obj)/%.o: \\$(src)/%.c\n" "\t@echo -n \"\\$(NOSTDINC_FLAGS) \\$(LINUXINCLUDE) \\$(EXTRA_CFLAGS)\"\n" +"\t\\$(CC) -c -o \\$@ \\$<\n" "EOF\n" "touch $TMPDIR/dummy.c\n" "make -s -C $KBUILD_DIR M=$TMPDIR $KBUILD_OPTS dummy.o 2>/dev/null\n"
Signature · 1 line
2.21.1
Quoted 119 lines · Arnaldo Carvalho de Melo
Hi Ingo/Thomas,
Please consider pulling,
Best regards,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit
bb6d3fb354c5ee8d6bde2d576eb7220ea09862b9:Linux 5.6-rc1 (2020-02-09 16:08:48 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-urgent-for-mingo-5.6-20200214for you to fetch changes up to
62765941155e487b351a72479078bd6fec973563:perf llvm: Fix script used to obtain kernel make directives to work with new kbuild (2020-02-14 10:06:00 -0300)
----------------------------------------------------------------
perf/urgent fixes:BPF:
Arnaldo Carvalho de Melo:
- Fix script used to obtain kernel make directives to work with new kbuild used for building BPF programs.
maps:
Jiri Olsa:
- Fixup
kmap->kmapsbackpointer in kernel maps.arm64:
John Garry:
- Add arm64 version of
get_cpuid()to get proper, arm64 specific output from 'perf list' and other tools.perf top:
Kim Phillips:
- Update kernel idle symbols so that output in AMD systems is in line with other systems.
perf stat:
Kim Phillips:
- Don't report a null stalled cycles per insn metric.
tools headers:
Arnaldo Carvalho de Melo:
- Sync
tools/headers with the kernel sources to get things like syscall numbers and new arguments so that 'perf trace' can decode and use them in tracepoint filters, e.g. prctl's new PR_{G,S}ET_IO_FLUSHER options.Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Arnaldo Carvalho de Melo (15):
tools include UAPI: Sync x86's syscalls_64.tbl, genericunistd.handfcntl.hto pick up openat2 andpidfd_getfdtools headers UAPI: Sync copy of arm64'sasm/unistd.hwith the kernel sources
tools headers UAPI: Syncprctl.hwith the kernel sources
perf beauty prctl: Export the 'options' strarray
perf trace: Resolve prctl's 'option' arg strings to numbers
tools headers UAPI: Syncsched.hwith the kernel
tools headers uapi: Synclinux/fscrypt.hwith the kernel sources
tools headers UAPI: Syncdrm/i915_drm.hwith the kernel sources
tools headers UAPI: Syncasm-generic/mman-common.hwith the kernel
tools include UAPI: Syncsound/asound.hcopy
tools headers x86: Syncdisabled-features.h
tools arch x86: Syncasm/cpufeatures.hwith the kernel sources
tools headers kvm: Sync kvm headers with the kernel sources
tools headers kvm: Synclinux/kvm.hwith the kernel sources
perf llvm: Fix script used to obtain kernel make directives to work with new kbuildJiri Olsa (4):
perf maps: Mark module DSOs with kernel type perf maps: Mark ksymbol DSOs with kernel type perf maps: Fixmap__clone()for struct kmap perf maps: Movekmap::kmapssetup tomaps__insert()John Garry (1):
perf tools: Add arm64 version ofget_cpuid()Kim Phillips (3):
perf stat: Don't report a null stalled cycles per insn metric perf symbols: Update the list of kernel idle symbols perf symbols: Convertsymbol__is_idle()to use strlisttools/arch/arm64/include/uapi/asm/kvm.h | 12 +- tools/arch/arm64/include/uapi/asm/unistd.h | 1 + tools/arch/x86/include/asm/cpufeatures.h | 2 + tools/arch/x86/include/asm/disabled-features.h | 8 +- tools/include/uapi/asm-generic/mman-common.h | 2 + tools/include/uapi/asm-generic/unistd.h | 7 +- tools/include/uapi/drm/i915_drm.h | 32 +++++ tools/include/uapi/linux/fcntl.h | 2 +- tools/include/uapi/linux/fscrypt.h | 14 +- tools/include/uapi/linux/kvm.h | 5 + tools/include/uapi/linux/openat2.h | 39 ++++++ tools/include/uapi/linux/prctl.h | 4 + tools/include/uapi/linux/sched.h | 6 + tools/include/uapi/sound/asound.h | 155 ++++++++++++++++++---- tools/perf/arch/arm64/util/header.c | 63 ++++++--- tools/perf/arch/x86/entry/syscalls/syscall_64.tbl | 2 + tools/perf/builtin-trace.c | 4 +- tools/perf/check-headers.sh | 1 + tools/perf/trace/beauty/beauty.h | 2 +
Quoted 8 lines
tools/perf/trace/beauty/prctl.c | 3 +- tools/perf/util/llvm-utils.c | 1 + tools/perf/util/machine.c | 26 ++-- tools/perf/util/map.c | 17 ++- tools/perf/util/stat-shadow.c | 6 - tools/perf/util/symbol.c | 17 ++- 25 files changed, 353 insertions(+), 78 deletions(-) create mode 100644 tools/include/uapi/linux/openat2.h
Pulled, thanks a lot Arnaldo!
Ingo