perf/urgent fixes
Subsystems (2)
Arnaldo Carvalho de Melo
maintainerHi Ingo,
So here it is the fixes in perf-core-for-mingo-4.14-20170912, as
requested, plus one last minute fix from Milian Wolff that helps with using perf as an AppImage[1].
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit 770e96125515daf1c7bc179323f2e0d488dfe6ac:
Merge tag 'perf-core-for-mingo-4.14-20170901' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2017-09-05 07:14:28 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-4.14-20170912
for you to fetch changes up to dfc9eec7716cc0a9f7eb743c703d74cd2d6085a0:
perf stat: Wait for the correct child (2017-09-12 12:49:13 -0300)
----------------------------------------------------------------
perf/urgent fixes:
- Fix TUI progress bar when delta from new total from that of the previous update is greater than the progress "step" (screen width progress bar block)) (Jiri Olsa)
- Make tools/lib/api make DEBUG=1 build use -D_FORTIFY_SOURCE=2 not to cripple debuginfo, just like tools/perf/ does (Jiri Olsa)
- Avoid leaking the 'perf.data' file to workloads started from the 'perf record' command line by using the O_CLOEXEC open flag (Jiri Olsa)
- Fix building when libunwind's 'unwind.h' file is present in the include path, clashing with tools/perf/util/unwind.h (Milian Wolff)
- Check per .perfconfig section entry flag, not just per section (Taeung Song)
- Support running perf binaries with a dash in their name, needed to run perf as an AppImage (Milian Wolff)
- Wait for the right child by using waitpid() when running workloads from 'perf stat', also to fix using perf as an AppImage (Milian Wolff)
----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
tools include linux: Guard against redefinition of some macros
Jiri Olsa (4):
tools lib api: Fix make DEBUG=1 build
perf tools: Open perf.data with O_CLOEXEC flag perf ui progress: Make sure we always define step value perf ui progress: Fix progress update
Milian Wolff (3):
perf tests: Fix compile when libunwind's unwind.h is available perf tools: Support running perf binaries with a dash in their name perf stat: Wait for the correct child
Taeung Song (1):
perf config: Check not only section->from_system_config but also item's
tools/include/linux/compiler-gcc.h | 9 ++++++--- tools/lib/api/Makefile | 8 +++++++- tools/perf/builtin-config.c | 2 +- tools/perf/builtin-stat.c | 2 +- tools/perf/perf.c | 14 ++++++++++---- tools/perf/tests/dwarf-unwind.c | 2 +- tools/perf/ui/progress.c | 9 +++++++-- tools/perf/util/data.c | 13 ++++++++++++- 8 files changed, 45 insertions(+), 14 deletions(-)
Test results:
The first ones are container (docker) based builds of tools/perf with and without libelf support, objtool where it is supported and samples/bpf/, ditto. Where clang is available, it is also used to build perf with/without libelf.
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.
The 'perf test' also runs shell scripts exercising the tools, checking if they affect the system in certain ways, like setting up kprobes and uprobes, request callchains for well known programs and check that they are the expected ones, see if 'perf trace' beautifies system call arguments correctly, etc.
Additionally, a new set of tests, script based, runs the tools in a live system, setting probes in place that then gets used by 'perf trace', with its output compared against expected results.
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.
# dm 1 alpine:3.4: Ok 2 alpine:3.5: Ok 3 alpine:3.6: Ok 4 alpine:edge: Ok 5 android-ndk:r12b-arm: Ok 6 android-ndk:r15c-arm: Ok 7 archlinux:latest: Ok 8 centos:5: Ok 9 centos:6: Ok 10 centos:7: Ok 11 debian:7: Ok 12 debian:8: Ok 13 debian:9: Ok 14 debian:experimental: Ok 15 debian:experimental-x-arm64: Ok 16 debian:experimental-x-mips: Ok 17 debian:experimental-x-mips64: Ok 18 debian:experimental-x-mipsel: Ok 19 fedora:20: Ok 20 fedora:21: Ok 21 fedora:22: Ok 22 fedora:23: Ok 23 fedora:24: Ok 24 fedora:24-x-ARC-uClibc: Ok 25 fedora:25: Ok 26 fedora:26: Ok 27 fedora:rawhide: Ok 28 mageia:5: Ok 29 opensuse:13.2: Ok 30 opensuse:42.1: Ok 31 opensuse:42.2: Ok 32 opensuse:42.3: Ok 33 opensuse:tumbleweed: Ok 34 oraclelinux:6: Ok 35 oraclelinux:7: Ok 36 ubuntu:12.04.5: Ok 37 ubuntu:14.04.4: Ok 38 ubuntu:14.04.4-x-linaro-arm64: Ok 39 ubuntu:15.10: Ok 40 ubuntu:16.04: Ok 41 ubuntu:16.04-x-arm: Ok 42 ubuntu:16.04-x-arm64: Ok 43 ubuntu:16.04-x-powerpc: Ok 44 ubuntu:16.04-x-powerpc64: Ok 45 ubuntu:16.04-x-powerpc64el: Ok 46 ubuntu:16.04-x-s390: Ok 47 ubuntu:16.10: Ok 48 ubuntu:17.04: Ok 49 ubuntu:17.10: Ok #
# uname -a
Linux jouet 4.13.0-rc7+ #3 SMP Sat Sep 2 09:04:44 -03 2017 x86_64 x86_64 x86_64 GNU/Linux
# 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: Number of exit events of a simple workload : Ok
22: Software clock events period values : Ok
23: Object code reading : Ok
24: Sample parsing : Ok
25: Use a dummy software event to keep tracking : Ok
26: Parse with no sample_id_all bit set : Ok
27: Filter hist entries : Ok
28: Lookup mmap thread : Ok
29: Share thread mg : Ok
30: Sort output of hist entries : Ok
31: Cumulate child hist entries : Ok
32: Track with sched_switch : Ok
33: Filter fds with revents mask in a fdarray : Ok
34: Add fd to a fdarray, making it autogrow : Ok
35: kmod_path__parse : Ok
36: Thread map : Ok
37: LLVM search and compile :
37.1: Basic BPF llvm compile : Ok
37.2: kbuild searching : Ok
37.3: Compile source for BPF prologue generation : Ok
37.4: Compile source for BPF relocation : Ok
38: Session topology : Ok
39: BPF filter :
39.1: Basic BPF filtering : Ok
39.2: BPF pinning : Ok
39.3: BPF prologue generation : Ok
39.4: BPF relocation checker : Ok
40: Synthesize thread map : Ok
41: Remove thread map : Ok
42: Synthesize cpu map : Ok
43: Synthesize stat config : Ok
44: Synthesize stat : Ok
45: Synthesize stat round : Ok
46: Synthesize attr update : Ok
47: Event times : Ok
48: Read backward ring buffer : Ok
49: Print cpu map : Ok
50: Probe SDT events : Ok
51: is_printable_array : Ok
52: Print bitmap : Ok
53: perf hooks : Ok
54: builtin clang support : Skip (not compiled in)
55: unit_number__scnprintf : Ok
56: x86 rdpmc : Ok
57: Convert perf time to TSC : Ok
58: DWARF unwind : Ok
59: x86 instruction decoder - new instructions : Ok
60: Intel cqm nmi context read : Skip
61: Use vfs_getname probe to get syscall args filenames : Ok
62: probe libc's inet_pton & backtrace it with ping : Ok
63: Check open filename arg using perf trace + vfs_getname: Ok
64: Add vfs_getname probe to get syscall args filenames : Ok
#
$ make -C tools/perf build-test
make: Entering directory '/home/acme/git/linux/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_util_map_o_O: make util/map.o
make_no_demangle_O: make NO_DEMANGLE=1
make_doc_O: make doc
make_no_libperl_O: make NO_LIBPERL=1
make_clean_all_O: make clean all
make_tags_O: make tags
make_util_pmu_bison_o_O: make util/pmu-bison.o
make_no_libelf_O: make NO_LIBELF=1
make_with_babeltrace_O: make LIBBABELTRACE=1
make_no_libbpf_O: make NO_LIBBPF=1
make_no_libpython_O: make NO_LIBPYTHON=1
make_no_newt_O: make NO_NEWT=1
make_debug_O: make DEBUG=1
make_no_libbionic_O: make NO_LIBBIONIC=1
make_with_clangllvm_O: make LIBCLANGLLVM=1
make_static_O: make LDFLAGS=-static
make_perf_o_O: make perf.o
make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_install_O: make install
make_no_libunwind_O: make NO_LIBUNWIND=1
make_install_prefix_slash_O: make install prefix=/tmp/krava/
make_no_gtk2_O: make NO_GTK2=1
make_no_libaudit_O: make NO_LIBAUDIT=1
make_no_libnuma_O: make NO_LIBNUMA=1
make_no_backtrace_O: make NO_BACKTRACE=1
make_install_prefix_O: make install prefix=/tmp/krava
make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
make_no_slang_O: make NO_SLANG=1
make_no_auxtrace_O: make NO_AUXTRACE=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
make_pure_O: make
make_install_bin_O: make install-bin
make_help_O: make help
OK
make: Leaving directory '/home/acme/git/linux/tools/perf'
$Arnaldo Carvalho de Melo
maintainerPATCH 1/9 tools include linux: Guard against redefinition of some macros
From: Arnaldo Carvalho de Melo <[email protected]>
When cross building to android r15c (and older versions) on Fedora 26 we notice these:
/opt/android-ndk-r15c/platforms/android-24/arch-arm/usr/include/sys/cdefs.h:332:0: note: this is the location of the previous definition
For __aligned, __packed and __noreturn, so guard those with ifdefs to avoid drowning useful warnings in these.
--- tools/include/linux/compiler-gcc.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
tools/include/linux/compiler-gcc.h +6 -3
@@ -21,11 +21,14 @@#define __must_be_array (a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))#define noinline __attribute__((noinline)) - +#ifndef __packed#define __packed __attribute__((packed)) - +#endif +#ifndef __noreturn#define __noreturn __attribute__((noreturn)) - +#endif +#ifndef __aligned#define __aligned (x) __attribute__((aligned(x))) +#endif #define __printf (a, b) __attribute__((format(printf, a, b)))#define __scanf (a, b) __attribute__((format(scanf, a, b)))
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 2/9 perf tests: Fix compile when libunwind's unwind.h is available
In reply to Arnaldo Carvalho de MeloFrom: Milian Wolff <[email protected]>
When cross compiling perf and I want to link against a self-compiled libunwind, I usually make the custom path where the libunwind headers exist visible by adding the libunwind prefix to the include path when compiling perf, i.e.:
~~~~~
$ ls $HOME/projects/compiled/other/include/ libunwind-coredump.h libunwind.h libunwind-x86_64.h libunwind-common.h libunwind-dynamic.h libunwind-ptrace.h unwind.h $ make EXTRA_CFLAGS="-I$HOME/projects/compiled/other/include/ ~~~~~~
Note the unwind.h header from libunwind which leads to compile errors when compiling tests/dwarf-unwind.c, since it shadows perf's util/unwind.h:
~~~~~tests/dwarf-unwind.c:41:32: error: ‘struct unwind_entry’ declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
static int unwind_entry(struct unwind_entry *entry, void *arg)
^~~~~~~~~~~~
tests/dwarf-unwind.c: In function ‘unwind_entry’:
tests/dwarf-unwind.c:44:22: error: dereferencing pointer to incomplete type ‘struct unwind_entry’
char *symbol = entry->sym ? entry->sym->name : NULL;
^~
tests/dwarf-unwind.c: In function ‘unwind_thread’:
tests/dwarf-unwind.c:92:8: error: implicit declaration of function ‘unwind__get_entries’; did you mean ‘unwind_entry’? [-Werror=implicit-function-declaration]
err = unwind__get_entries(unwind_entry, &cnt, thread,
^~~~~~~~~~~~~~~~~~~
unwind_entrytests/dwarf-unwind.c:92:8: error: nested extern declaration of ‘unwind__get_entries’ [-Werror=nested-externs]
~~~~~~
Fix this compile error by specificing an explicit include of perf's unwind.h in the util folder.
--- tools/perf/tests/dwarf-unwind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/tests/dwarf-unwind.c +1 -1
@@ -6,7 +6,7 @@#include "debug.h" #include "machine.h" #include "event.h" -#include "unwind.h" +#include "../util/unwind.h" #include "perf_regs.h" #include "map.h" #include "thread.h"
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 3/9 tools lib api: Fix make DEBUG=1 build
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
Do not use -D_FORTIFY_SOURCE=2 for DEBUG build as it seems to mess up with debuginfo, which results in bad gdb experience.
We already do that for tools/perf/.
--- tools/lib/api/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
tools/lib/api/Makefile +7 -1
@@ -17,13 +17,19 @@ MAKEFLAGS += --no-print-directory LIBFILE = $(OUTPUT)libapi.a CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC +CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -fPIC +ifeq ($(DEBUG),0) ifeq ($(CC_NO_CLANG), 0) CFLAGS += -O3 else CFLAGS += -O6 endif +endif + +ifeq ($(DEBUG),0) + CFLAGS += -D_FORTIFY_SOURCE +endif # Treat warnings as errors unless directed not to ifneq ($(WERROR),0)
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 4/9 perf tools: Open perf.data with O_CLOEXEC flag
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
Do not carry the perf.data file descriptor into the workload process and close it when perf executes the workload.
--- tools/perf/util/data.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
tools/perf/util/data.c +12 -1
@@ -10,6 +10,16 @@#include "util.h" #include "debug.h" +#ifndef O_CLOEXEC +#ifdef __sparc__ +#define O_CLOEXEC 0x400000 +#elif defined(__alpha__) || defined(__hppa__) +#define O_CLOEXEC 010000000 +#else +#define O_CLOEXEC 02000000 +#endif +#endif +static bool check_pipe (struct perf_data_file *file) {struct stat st;
@@ -96,7 +106,8 @@ static int open_file_write(struct perf_data_file *file)if (check_backup (file))return -1 ; - fd =open (file->path,O_CREAT |O_RDWR |O_TRUNC ,S_IRUSR |S_IWUSR ); + fd =open (file->path,O_CREAT |O_RDWR |O_TRUNC |O_CLOEXEC , +S_IRUSR |S_IWUSR );if (fd <0 ) pr_err("failed to open %s : %s\n", file->path,
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 5/9 perf ui progress: Make sure we always define step value
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
Unlikely, but we could have ui_progress__init being called with total < 16, which would set the next and step variables to 0. That would force unnecessary ui_progress__ops->update calls because 'next' would never raise.
Forcing the next and step values to be always > 0.
--- tools/perf/ui/progress.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/ui/progress.c +1 -1
@@ -25,7 +25,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)void ui_progress__init (struct ui_progress *p,u64 total,const char *title) { p->curr =0 ; - p->next = p->step = total /16 ; + p->next = p->step = total /16 ?:1 ; p->total = total; p->title = title;
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 6/9 perf ui progress: Fix progress update
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
We currently update the 'next' variable only with a single step value. But it's possible the 'adv' update is bigger than single 'step' value. This would leave 'next' value under counted and force unnecessary ui_progress__ops->update calls.
Calculate the amount of steps we need for 'adv' update and increase the 'next' with that amounts of steps.
--- tools/perf/ui/progress.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
tools/perf/ui/progress.c +6 -1
@@ -1,3 +1,4 @@ +#include <linux/kernel.h> #include "../cache.h" #include "progress.h"
@@ -14,10 +15,14 @@ struct ui_progress_ops *ui_progress__ops = &null_progress__ops;void ui_progress__update (struct ui_progress *p,u64 adv) { +u64 last = p->curr; + p->curr += adv;if (p->curr >= p->next) { - p->next += p->step; +u64 nr =DIV_ROUND_UP (p->curr - last, p->step); + + p->next += nr * p->step; ui_progress__ops->update (p); } }
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 7/9 perf config: Check not only section->from_system_config but also item's
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
Currently section->from_system_config is being checked multiple times. item->from_system_config should be checked instead, when iterating thru the items in a section. Fix it.
--- tools/perf/builtin-config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-config.c +1 -1
@@ -59,7 +59,7 @@ static int set_config(struct perf_config_set *set, const char *file_name,fprintf (fp,"[%s]\n" , section->name);perf_config_items__for_each_entry (§ion->items, item) { -if (!use_system_config && section->from_system_config) +if (!use_system_config && item->from_system_config)continue ;if (item->value) fprintf(fp, "\t%s = %s\n",
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 8/9 perf tools: Support running perf binaries with a dash in their name
In reply to Arnaldo Carvalho de MeloFrom: Milian Wolff <[email protected]>
Previously the part behind "perf-" was interpreted as an internal perf command. If the suffix could not be handled, the execution was stopped. This makes it impossible to launch perf binaries that got renamed to have the perf- prefix. This is e.g. the case for appimages (e.g. "perf-x86_64.AppImage"), but would also apply to all other scenarios where users symlink or rename perf themselves:
Status quo with the broken behavior:
$ ln -s ./perf ./perf-custom-suffix $ ./perf-custom-suffix list cannot handle custom-suffix internally$
Also note the missing newline at the end of the error message.
With this patch applied, the above works properly:
$ ./perf-custom-suffix list
List of pre-defined events (to be used in -e):
...
--- tools/perf/perf.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
tools/perf/perf.c +10 -4
@@ -467,15 +467,21 @@ int main(int argc, const char **argv)* - cannot execute it externally (since it would just do * the same thing over again) * -* So we just directly call the internal command handler, and -* die if that one cannot handle it. +* So we just directly call the internal command handler. If that one +* fails to handle this, then maybe we just run a renamed perf binary +* that contains a dash in its name. To handle this scenario, we just +* fall through and ignore the "xxxx" part of the command string. */ if (strstarts (cmd,"perf-" )) { cmd +=5 ; argv[0 ] = cmd;handle_internal_command (argc, argv); -fprintf (stderr,"cannot handle %s internally" , cmd); - goto out; +/* +* If the command is handled, the above function does not +* return undo changes and fall through in such a case. +*/ + cmd -=5 ; + argv[0 ] = cmd; }if (strstarts (cmd,"trace" )) {#ifdef HAVE_LIBAUDIT_SUPPORT
Signature · 1 line
2.13.5
Arnaldo Carvalho de Melo
maintainerPATCH 9/9 perf stat: Wait for the correct child
In reply to Arnaldo Carvalho de MeloFrom: Milian Wolff <[email protected]>
When packaging the perf userland application into an AppImage, the wait() call in perf stat returned too early. It turned out that some other child process exited, but not the one perf stat launched:
$ sudo strace -e fork,execve,clone,wait4 -f ./perf-x86_64.AppImage stat sleep 1
execve("./perf-git.3a73b7f9-x86_64.AppImage", ["./perf-git.3a73b7f9-x86_64.AppIm"..., "stat", "sleep", "1"], 0x7ffec1bbf050 /* 18 vars */) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f6a6e7efe50) = 3912
strace: Process 3912 attached
[pid 3912] clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f6a6e7efe50) = 3914
strace: Process 3914 attached
[pid 3912] +++ exited with 0 +++
[pid 3911] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3912, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
[pid 3914] clone(strace: Process 3915 attached
child_stack=0x7f6a6d9fefb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f6a6d9ff9d0, tls=0x7f6a6d9ff700, child_tidptr=0x7f6a6d9ff9d0) = 3915
[pid 3911] execve("/tmp/.mount_perf-g6VYMpl/AppRun", ["./perf-git.3a73b7f9-x86_64.AppIm"..., "stat", "sleep", "1"], 0x14aab70 /* 21 vars */) = 0
[pid 3911] clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f4ae113c4d0) = 3916
strace: Process 3916 attached
[pid 3911] wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 3912
[pid 3916] execve("/usr/libexec/perf-core/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/tmp/./sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/home/milian/.bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/usr/lib/icecream/libexec/icecc/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/ssd2/milian/projects/compiled/other/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/home/milian/.bin/kf5/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/ssd2/milian/projects/compiled/kf5/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/home/milian/projects/compiled/other/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/home/milian/projects/compiled/kf5/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/usr/local/sbin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/usr/local/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */) = -1 ENOENT (No such file or directory)
[pid 3916] execve("/usr/bin/sleep", ["sleep", "1"], 0x27d3650 /* 22 vars */
Performance counter stats for 'sleep 1': <not counted> task-clock
<not counted> context-switches
<not counted> cpu-migrations
<not counted> page-faults
<not counted> cycles
<not counted> instructions
<not counted> branches
<not counted> branch-misses
0.000047194 seconds time elapsed
[pid 3916] --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=3911, si_uid=0} ---
[pid 3916] +++ killed by SIGTERM +++
[pid 3911] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=3916, si_uid=0, si_status=SIGTERM, si_utime=0, si_stime=0} ---
[pid 3915] --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=3914, si_uid=0} ---
[pid 3911] +++ exited with 0 +++
[pid 3915] --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=3914, si_uid=0} ---
[pid 3915] +++ exited with 0 ++++++ exited with 0 +++
This patch uses waitpid instead to ensure the call waits for the debuggee application launched by 'perf stat'. This fixes 'perf stat' when launched from an AppImage:
$ ./perf-x86_64.AppImage stat sleep 1
Performance counter stats for 'sleep 1':
0.357235 task-clock (msec) # 0.000 CPUs utilized
1 context-switches # 0.003 M/sec
0 cpu-migrations # 0.000 K/sec
50 page-faults # 0.140 M/sec
1269602 cycles # 3.554 GHz
654278 instructions # 0.52 insn per cycle
129963 branches # 363.803 M/sec
7082 branch-misses # 5.45% of all branches1.000633420 seconds time elapsed
--- tools/perf/builtin-stat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-stat.c +1 -1
@@ -707,7 +707,7 @@ static int __run_perf_stat(int argc, const char **argv)process_interval (); } } -wait (&status); +waitpid (child_pid, &status,0 );if (workload_exec_errno) {const char *emsg =str_error_r (workload_exec_errno, msg,sizeof (msg));
Signature · 1 line
2.13.5
Quoted 68 lines · Arnaldo Carvalho de Melo
Hi Ingo,
So here it is the fixes in perf-core-for-mingo-4.14-20170912, asrequested, plus one last minute fix from Milian Wolff that helps with using perf as an AppImage[1].
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit
770e96125515daf1c7bc179323f2e0d488dfe6ac:Merge tag 'perf-core-for-mingo-4.14-20170901' of
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linuxinto perf/urgent (2017-09-05 07:14:28 +0200)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-urgent-for-mingo-4.14-20170912for you to fetch changes up to
dfc9eec7716cc0a9f7eb743c703d74cd2d6085a0:perf stat: Wait for the correct child (2017-09-12 12:49:13 -0300)
----------------------------------------------------------------
perf/urgent fixes:- Fix TUI progress bar when delta from new total from that of the previous update is greater than the progress "step" (screen width progress bar block)) (Jiri Olsa)
- Make
tools/lib/apimake DEBUG=1 build use -D_FORTIFY_SOURCE=2 not to cripple debuginfo, just liketools/perf/does (Jiri Olsa)- Avoid leaking the 'perf.data' file to workloads started from the 'perf record' command line by using the
O_CLOEXECopen flag (Jiri Olsa)- Fix building when libunwind's '
unwind.h' file is present in the include path, clashing withtools/perf/util/unwind.h(Milian Wolff)- Check per .perfconfig section entry flag, not just per section (Taeung Song)
- Support running perf binaries with a dash in their name, needed to run perf as an AppImage (Milian Wolff)
- Wait for the right child by using
waitpid()when running workloads from 'perf stat', also to fix using perf as an AppImage (Milian Wolff)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
tools include linux: Guard against redefinition of some macrosJiri Olsa (4):
tools lib api: Fix make DEBUG=1 build
perf tools: Open perf.data withO_CLOEXECflag perf ui progress: Make sure we always define step value perf ui progress: Fix progress updateMilian Wolff (3):
perf tests: Fix compile when libunwind'sunwind.his available perf tools: Support running perf binaries with a dash in their name perf stat: Wait for the correct childTaeung Song (1):
perf config: Check not only section->from_system_config but also item's
Quoted 9 lines
tools/include/linux/compiler-gcc.h | 9 ++++++--- tools/lib/api/Makefile | 8 +++++++- tools/perf/builtin-config.c | 2 +- tools/perf/builtin-stat.c | 2 +- tools/perf/perf.c | 14 ++++++++++---- tools/perf/tests/dwarf-unwind.c | 2 +- tools/perf/ui/progress.c | 9 +++++++-- tools/perf/util/data.c | 13 ++++++++++++- 8 files changed, 45 insertions(+), 14 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo
PATCH 1/1 tools/include: Sync kernel ABI headers with tooling headers
In reply to Arnaldo Carvalho de MeloTime for a sync with ABI/uapi headers with the upcoming v4.14 kernel.
None of the ABI changes require any source code level changes to our existing in-kernel tooling code:
- tools/arch/s390/include/uapi/asm/kvm.h:
New KVM_S390_VM_TOD_EXT ABI, not used by in-kernel tooling.
- tools/arch/x86/include/asm/cpufeatures.h:
tools/arch/x86/include/asm/disabled-features.h:
New PCID, SME and VGIF x86 CPU feature bits defined.
- tools/include/asm-generic/hugetlb_encode.h:
tools/include/uapi/asm-generic/mman-common.h:
tools/include/uapi/linux/mman.h:
Two new madvise() flags, plus a hugetlb system call mmap flags restructuring/extension changes.
- tools/include/uapi/drm/drm.h:
tools/include/uapi/drm/i915_drm.h:
New drm_syncobj_create flags definitions, new drm_syncobj_wait and drm_syncobj_array ABIs. DRM_I915_PERF_* calls and a new I915_PARAM_HAS_EXEC_FENCE_ARRAY ABI for the Intel driver.
- tools/include/uapi/linux/bpf.h:
New bpf_sock fields (::mark and ::priority), new XDP_REDIRECT action, new kvm_ppc_smmu_info fields (::data_keys, instr_keys)
--- tools/arch/s390/include/uapi/asm/kvm.h | 6 +++ tools/arch/x86/include/asm/cpufeatures.h | 2 + tools/arch/x86/include/asm/disabled-features.h | 4 +- tools/include/asm-generic/hugetlb_encode.h | 34 +++++++++++++++++ tools/include/uapi/asm-generic/mman-common.h | 14 ++----- tools/include/uapi/drm/drm.h | 22 +++++++++++ tools/include/uapi/drm/i915_drm.h | 51 +++++++++++++++++++++++++- tools/include/uapi/linux/bpf.h | 32 ++++++++++------ tools/include/uapi/linux/kvm.h | 3 +- tools/include/uapi/linux/mman.h | 24 +++++++++++- 10 files changed, 164 insertions(+), 28 deletions(-)
tools/arch/s390/include/uapi/asm/kvm.h +6 -0
@@ -88,6 +88,12 @@ struct kvm_s390_io_adapter_req {/* kvm attributes for KVM_S390_VM_TOD */ #define KVM_S390_VM_TOD_LOW 0#define KVM_S390_VM_TOD_HIGH 1 +#define KVM_S390_VM_TOD_EXT 2 + +struct kvm_s390_vm_tod_clock { +__u8 epoch_idx; +__u64 tod; +};/* kvm attributes for KVM_S390_VM_CPU_MODEL */ /* processor related attributes are r/w */
tools/arch/x86/include/asm/cpufeatures.h +2 -0
@@ -196,6 +196,7 @@#define X86_FEATURE_HW_PSTATE ( 7*32+ 8)/* AMD HW-PState */ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9)/* AMD ProcFeedbackInterface */ +#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ #define X86_FEATURE_INTEL_PPIN ( 7*32+14)/* Intel Processor Inventory Number */ #define X86_FEATURE_INTEL_PT ( 7*32+15)/* Intel Processor Trace */
@@ -287,6 +288,7 @@#define X86_FEATURE_PFTHRESHOLD (15*32+12)/* pause filter threshold */ #define X86_FEATURE_AVIC (15*32+13)/* Virtual Interrupt Controller */ #define X86_FEATURE_V_VMSAVE_VMLOAD (15*32+15)/* Virtual VMSAVE VMLOAD */ +#define X86_FEATURE_VGIF (15*32+16)/* Virtual GIF */ /* Intel-defined CPU features, CPUID level 0x00000007:0 (ecx), word 16 */ #define X86_FEATURE_AVX512VBMI (16*32+ 1)/* AVX512 Vector Bit Manipulation instructions*/
tools/arch/x86/include/asm/disabled-features.h +3 -1
@@ -21,11 +21,13 @@# define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))# define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))# define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31)) +# define DISABLE_PCID 0#else # define DISABLE_VME 0# define DISABLE_K6_MTRR 0# define DISABLE_CYRIX_ARR 0# define DISABLE_CENTAUR_MCR 0 +# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))#endif /* CONFIG_X86_64 */ #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
@@ -49,7 +51,7 @@#define DISABLED_MASK1 0#define DISABLED_MASK2 0#define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR) -#define DISABLED_MASK4 0 +#define DISABLED_MASK4 (DISABLE_PCID)#define DISABLED_MASK5 0#define DISABLED_MASK6 0#define DISABLED_MASK7 0
tools/include/asm-generic/hugetlb_encode.h new file +34 -0
@@ -0,0 +1,34 @@ +#ifndef _ASM_GENERIC_HUGETLB_ENCODE_H_ +#define _ASM_GENERIC_HUGETLB_ENCODE_H_ + +/* +* Several system calls take a flag to request "hugetlb" huge pages. +* Without further specification, these system calls will use the +* system's default huge page size. If a system supports multiple +* huge page sizes, the desired huge page size can be specified in +* bits [26:31] of the flag arguments. The value in these 6 bits +* will encode the log2 of the huge page size. +* +* The following definitions are associated with this huge page size +* encoding in flag arguments. System call specific header files +* that use this encoding should include this file. They can then +* provide definitions based on these with their own specific prefix. +* for example: +* #define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT +*/ + +#define HUGETLB_FLAG_ENCODE_SHIFT 26 +#define HUGETLB_FLAG_ENCODE_MASK 0x3f + +#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) + +#endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */
tools/include/uapi/asm-generic/mman-common.h +3 -11
@@ -58,20 +58,12 @@overrides the coredump filter bits */ #define MADV_DODUMP 17/* Clear the MADV_DONTDUMP flag */ +#define MADV_WIPEONFORK 18/* Zero memory on fork, child only */ +#define MADV_KEEPONFORK 19/* Undo MADV_WIPEONFORK */ +/* compatibility flags */ #define MAP_FILE 0 -/* -* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. -* This gives us 6 bits, which is enough until someone invents 128 bit address -* spaces. -* -* Assume these are all power of twos. -* When 0 use the default page size. -*/ -#define MAP_HUGE_SHIFT 26 -#define MAP_HUGE_MASK 0x3f -#define PKEY_DISABLE_ACCESS 0x1#define PKEY_DISABLE_WRITE 0x2#define PKEY_ACCESS_MASK (PKEY_DISABLE_ACCESS |\
tools/include/uapi/drm/drm.h +22 -0
@@ -700,6 +700,7 @@ struct drm_prime_handle {struct drm_syncobj_create {__u32 handle; +#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0)__u32 flags; };
@@ -718,6 +719,24 @@ struct drm_syncobj_handle {__u32 pad; }; +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) +struct drm_syncobj_wait { +__u64 handles; +/* absolute timeout */ +__s64 timeout_nsec; +__u32 count_handles; +__u32 flags; +__u32 first_signaled;/* only valid when not waiting all */ +__u32 pad; +}; + +struct drm_syncobj_array { +__u64 handles; +__u32 count_handles; +__u32 pad; +}; +#if defined(__cplusplus) }#endif
@@ -840,6 +859,9 @@ extern "C" {#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy)#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle)#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) +#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) +#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) +#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array)/** * Device specific ioctls should only be in their respective headers
tools/include/uapi/drm/i915_drm.h +49 -2
93 lines not on this page · raw message
tools/include/uapi/linux/bpf.h +20 -12
@@ -143,12 +143,6 @@ enum bpf_attach_type {#define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE -enum bpf_sockmap_flags { -BPF_SOCKMAP_UNSPEC , -BPF_SOCKMAP_STRPARSER , - __MAX_BPF_SOCKMAP_FLAG -}; -/* If BPF_F_ALLOW_OVERRIDE flag is used in BPF_PROG_ATTACH command * to the given target_fd cgroup the descendent cgroup will be able to * override effective bpf program that was inherited from this cgroup
@@ -368,9 +362,20 @@ union bpf_attr {* int bpf_redirect(ifindex, flags) * redirect to another netdev * @ifindex: ifindex of the net device -* @flags: bit 0 - if set, redirect to ingress instead of egress -* other bits - reserved -* Return: TC_ACT_REDIRECT +* @flags: +* cls_bpf: +* bit 0 - if set, redirect to ingress instead of egress +* other bits - reserved +* xdp_bpf: +* all bits - reserved +* Return: cls_bpf: TC_ACT_REDIRECT on success or TC_ACT_SHOT on error +* xdp_bfp: XDP_REDIRECT on success or XDP_ABORT on error +* int bpf_redirect_map(map, key, flags) +* redirect to endpoint in map +* @map: pointer to dev map +* @key: index in map to lookup +* @flags: -- +* Return: XDP_REDIRECT on success or XDP_ABORT on error * * u32 bpf_get_route_realm(skb) * retrieve a dst's tclassid
@@ -632,7 +637,7 @@ union bpf_attr {FN (skb_adjust_room), \FN (redirect_map), \FN (sk_redirect_map), \ -FN (sock_map_update), +FN (sock_map_update), \/* integer value in 'imm' field of BPF_CALL instruction selects which helper * function eBPF program intends to call
@@ -753,20 +758,23 @@ struct bpf_sock {__u32 family;__u32 type;__u32 protocol; +__u32 mark; +__u32 priority; };#define XDP_PACKET_HEADROOM 256/* User return codes for XDP prog type. * A valid XDP program must return one of these defined values. All other -* return codes are reserved for future use. Unknown return codes will result -* in packet drop. +* return codes are reserved for future use. Unknown return codes will +* result in packet drops and a warning via bpf_warn_invalid_xdp_action(). */ enum xdp_action {XDP_ABORTED =0 ,XDP_DROP ,XDP_PASS ,XDP_TX , +XDP_REDIRECT , };/* user accessible metadata for XDP packet hook
tools/include/uapi/linux/kvm.h +2 -1
@@ -711,7 +711,8 @@ struct kvm_ppc_one_seg_page_size {struct kvm_ppc_smmu_info {__u64 flags;__u32 slb_size; -__u32 pad; +__u16 data_keys;/* # storage keys supported for data */ +__u16 instr_keys;/* # storage keys supported for instructions */ struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ ]; };
tools/include/uapi/linux/mman.h +23 -1
@@ -1,7 +1,8 @@#ifndef _UAPI_LINUX_MMAN_H#define _UAPI_LINUX_MMAN_H -#include <uapi/asm/mman.h> +#include <asm/mman.h> +#include <asm-generic/hugetlb_encode.h> #define MREMAP_MAYMOVE 1#define MREMAP_FIXED 2
@@ -10,4 +11,25 @@#define OVERCOMMIT_ALWAYS 1#define OVERCOMMIT_NEVER 2 +/* +* Huge page size encoding when MAP_HUGETLB is specified, and a huge page +* size other than the default is desired. See hugetlb_encode.h. +* All known huge page size encodings are provided here. It is the +* responsibility of the application to know which sizes are supported on +* the running system. See mmap(2) man page for details. +*/ +#define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT +#define MAP_HUGE_MASK HUGETLB_FLAG_ENCODE_MASK + +#define MAP_HUGE_64KB HUGETLB_FLAG_ENCODE_64KB +#define MAP_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB +#define MAP_HUGE_1MB HUGETLB_FLAG_ENCODE_1MB +#define MAP_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB +#define MAP_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB +#define MAP_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MAP_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB +#define MAP_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB +#define MAP_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB +#endif /* _UAPI_LINUX_MMAN_H */
tip-bot for Ingo Molnar
merge bot[tip:perf/urgent] tools include: Sync kernel ABI headers with tooling headers
tools include: Sync kernel ABI headers with tooling headers
Commit-ID: 549a3976523c69a0245c0a310210c824a0b26e35 Gitweb: https://git.kernel.org/tip/549a3976523c69a0245c0a310210c824a0b26e35 Author: Ingo Molnar <[email protected]> AuthorDate: Wed, 13 Sep 2017 09:38:23 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 25 Sep 2017 10:39:44 -0300
tools include: Sync kernel ABI headers with tooling headers
Time for a sync with ABI/uapi headers with the upcoming v4.14 kernel.
None of the ABI changes require any source code level changes to our existing in-kernel tooling code:
- tools/arch/s390/include/uapi/asm/kvm.h:
New KVM_S390_VM_TOD_EXT ABI, not used by in-kernel tooling.
- tools/arch/x86/include/asm/cpufeatures.h:
tools/arch/x86/include/asm/disabled-features.h:
New PCID, SME and VGIF x86 CPU feature bits defined.
- tools/include/asm-generic/hugetlb_encode.h:
tools/include/uapi/asm-generic/mman-common.h:
tools/include/uapi/linux/mman.h:
Two new madvise() flags, plus a hugetlb system call mmap flags restructuring/extension changes.
- tools/include/uapi/drm/drm.h:
tools/include/uapi/drm/i915_drm.h:
New drm_syncobj_create flags definitions, new drm_syncobj_wait and drm_syncobj_array ABIs. DRM_I915_PERF_* calls and a new I915_PARAM_HAS_EXEC_FENCE_ARRAY ABI for the Intel driver.
- tools/include/uapi/linux/bpf.h:
New bpf_sock fields (::mark and ::priority), new XDP_REDIRECT action, new kvm_ppc_smmu_info fields (::data_keys, instr_keys)
--- tools/arch/s390/include/uapi/asm/kvm.h | 6 +++ tools/arch/x86/include/asm/cpufeatures.h | 2 + tools/arch/x86/include/asm/disabled-features.h | 4 +- .../include}/asm-generic/hugetlb_encode.h | 0 tools/include/uapi/asm-generic/mman-common.h | 14 ++---- tools/include/uapi/drm/drm.h | 22 ++++++++++ tools/include/uapi/drm/i915_drm.h | 51 +++++++++++++++++++++- tools/include/uapi/linux/bpf.h | 32 +++++++++----- tools/include/uapi/linux/kvm.h | 3 +- tools/include/uapi/linux/mman.h | 24 +++++++++- 10 files changed, 130 insertions(+), 28 deletions(-)
tools/arch/s390/include/uapi/asm/kvm.h +6 -0
@@ -88,6 +88,12 @@ struct kvm_s390_io_adapter_req {/* kvm attributes for KVM_S390_VM_TOD */ #define KVM_S390_VM_TOD_LOW 0#define KVM_S390_VM_TOD_HIGH 1 +#define KVM_S390_VM_TOD_EXT 2 + +struct kvm_s390_vm_tod_clock { +__u8 epoch_idx; +__u64 tod; +};/* kvm attributes for KVM_S390_VM_CPU_MODEL */ /* processor related attributes are r/w */
tools/arch/x86/include/asm/cpufeatures.h +2 -0
@@ -196,6 +196,7 @@#define X86_FEATURE_HW_PSTATE ( 7*32+ 8)/* AMD HW-PState */ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9)/* AMD ProcFeedbackInterface */ +#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ #define X86_FEATURE_INTEL_PPIN ( 7*32+14)/* Intel Processor Inventory Number */ #define X86_FEATURE_INTEL_PT ( 7*32+15)/* Intel Processor Trace */
@@ -287,6 +288,7 @@#define X86_FEATURE_PFTHRESHOLD (15*32+12)/* pause filter threshold */ #define X86_FEATURE_AVIC (15*32+13)/* Virtual Interrupt Controller */ #define X86_FEATURE_V_VMSAVE_VMLOAD (15*32+15)/* Virtual VMSAVE VMLOAD */ +#define X86_FEATURE_VGIF (15*32+16)/* Virtual GIF */ /* Intel-defined CPU features, CPUID level 0x00000007:0 (ecx), word 16 */ #define X86_FEATURE_AVX512VBMI (16*32+ 1)/* AVX512 Vector Bit Manipulation instructions*/
tools/arch/x86/include/asm/disabled-features.h +3 -1
@@ -21,11 +21,13 @@# define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))# define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))# define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31)) +# define DISABLE_PCID 0#else # define DISABLE_VME 0# define DISABLE_K6_MTRR 0# define DISABLE_CYRIX_ARR 0# define DISABLE_CENTAUR_MCR 0 +# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))#endif /* CONFIG_X86_64 */ #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
@@ -49,7 +51,7 @@#define DISABLED_MASK1 0#define DISABLED_MASK2 0#define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR) -#define DISABLED_MASK4 0 +#define DISABLED_MASK4 (DISABLE_PCID)#define DISABLED_MASK5 0#define DISABLED_MASK6 0#define DISABLED_MASK7 0
tools/include/asm-generic/hugetlb_encode.h renamed from include/uapi/asm-generic/hugetlb_encode.h +0 -0
tools/include/uapi/asm-generic/mman-common.h +3 -11
@@ -58,20 +58,12 @@overrides the coredump filter bits */ #define MADV_DODUMP 17/* Clear the MADV_DONTDUMP flag */ +#define MADV_WIPEONFORK 18/* Zero memory on fork, child only */ +#define MADV_KEEPONFORK 19/* Undo MADV_WIPEONFORK */ +/* compatibility flags */ #define MAP_FILE 0 -/* -* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. -* This gives us 6 bits, which is enough until someone invents 128 bit address -* spaces. -* -* Assume these are all power of twos. -* When 0 use the default page size. -*/ -#define MAP_HUGE_SHIFT 26 -#define MAP_HUGE_MASK 0x3f -#define PKEY_DISABLE_ACCESS 0x1#define PKEY_DISABLE_WRITE 0x2#define PKEY_ACCESS_MASK (PKEY_DISABLE_ACCESS |\
tools/include/uapi/drm/drm.h +22 -0
@@ -700,6 +700,7 @@ struct drm_prime_handle {struct drm_syncobj_create {__u32 handle; +#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0)__u32 flags; };
@@ -718,6 +719,24 @@ struct drm_syncobj_handle {__u32 pad; }; +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) +struct drm_syncobj_wait { +__u64 handles; +/* absolute timeout */ +__s64 timeout_nsec; +__u32 count_handles; +__u32 flags; +__u32 first_signaled;/* only valid when not waiting all */ +__u32 pad; +}; + +struct drm_syncobj_array { +__u64 handles; +__u32 count_handles; +__u32 pad; +}; +#if defined(__cplusplus) }#endif
@@ -840,6 +859,9 @@ extern "C" {#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy)#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle)#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) +#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait) +#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array) +#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array)/** * Device specific ioctls should only be in their respective headers
tools/include/uapi/drm/i915_drm.h +49 -2
93 lines not on this page · raw message
tools/include/uapi/linux/bpf.h +20 -12
@@ -143,12 +143,6 @@ enum bpf_attach_type {#define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE -enum bpf_sockmap_flags { -BPF_SOCKMAP_UNSPEC , -BPF_SOCKMAP_STRPARSER , - __MAX_BPF_SOCKMAP_FLAG -}; -/* If BPF_F_ALLOW_OVERRIDE flag is used in BPF_PROG_ATTACH command * to the given target_fd cgroup the descendent cgroup will be able to * override effective bpf program that was inherited from this cgroup
@@ -368,9 +362,20 @@ union bpf_attr {* int bpf_redirect(ifindex, flags) * redirect to another netdev * @ifindex: ifindex of the net device -* @flags: bit 0 - if set, redirect to ingress instead of egress -* other bits - reserved -* Return: TC_ACT_REDIRECT +* @flags: +* cls_bpf: +* bit 0 - if set, redirect to ingress instead of egress +* other bits - reserved +* xdp_bpf: +* all bits - reserved +* Return: cls_bpf: TC_ACT_REDIRECT on success or TC_ACT_SHOT on error +* xdp_bfp: XDP_REDIRECT on success or XDP_ABORT on error +* int bpf_redirect_map(map, key, flags) +* redirect to endpoint in map +* @map: pointer to dev map +* @key: index in map to lookup +* @flags: -- +* Return: XDP_REDIRECT on success or XDP_ABORT on error * * u32 bpf_get_route_realm(skb) * retrieve a dst's tclassid
@@ -632,7 +637,7 @@ union bpf_attr {FN (skb_adjust_room), \FN (redirect_map), \FN (sk_redirect_map), \ -FN (sock_map_update), +FN (sock_map_update), \/* integer value in 'imm' field of BPF_CALL instruction selects which helper * function eBPF program intends to call
@@ -753,20 +758,23 @@ struct bpf_sock {__u32 family;__u32 type;__u32 protocol; +__u32 mark; +__u32 priority; };#define XDP_PACKET_HEADROOM 256/* User return codes for XDP prog type. * A valid XDP program must return one of these defined values. All other -* return codes are reserved for future use. Unknown return codes will result -* in packet drop. +* return codes are reserved for future use. Unknown return codes will +* result in packet drops and a warning via bpf_warn_invalid_xdp_action(). */ enum xdp_action {XDP_ABORTED =0 ,XDP_DROP ,XDP_PASS ,XDP_TX , +XDP_REDIRECT , };/* user accessible metadata for XDP packet hook
tools/include/uapi/linux/kvm.h +2 -1
@@ -711,7 +711,8 @@ struct kvm_ppc_one_seg_page_size {struct kvm_ppc_smmu_info {__u64 flags;__u32 slb_size; -__u32 pad; +__u16 data_keys;/* # storage keys supported for data */ +__u16 instr_keys;/* # storage keys supported for instructions */ struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ ]; };
tools/include/uapi/linux/mman.h +23 -1
@@ -1,7 +1,8 @@#ifndef _UAPI_LINUX_MMAN_H#define _UAPI_LINUX_MMAN_H -#include <uapi/asm/mman.h> +#include <asm/mman.h> +#include <asm-generic/hugetlb_encode.h> #define MREMAP_MAYMOVE 1#define MREMAP_FIXED 2
@@ -10,4 +11,25 @@#define OVERCOMMIT_ALWAYS 1#define OVERCOMMIT_NEVER 2 +/* +* Huge page size encoding when MAP_HUGETLB is specified, and a huge page +* size other than the default is desired. See hugetlb_encode.h. +* All known huge page size encodings are provided here. It is the +* responsibility of the application to know which sizes are supported on +* the running system. See mmap(2) man page for details. +*/ +#define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT +#define MAP_HUGE_MASK HUGETLB_FLAG_ENCODE_MASK + +#define MAP_HUGE_64KB HUGETLB_FLAG_ENCODE_64KB +#define MAP_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB +#define MAP_HUGE_1MB HUGETLB_FLAG_ENCODE_1MB +#define MAP_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB +#define MAP_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB +#define MAP_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MAP_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB +#define MAP_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB +#define MAP_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB +#endif /* _UAPI_LINUX_MMAN_H */