Arnaldo Carvalho de Melo
7542b767b0
perf bpf: Add kprobe example to catch 5s naps
...
Description:
. Disable strace like syscall tracing (--no-syscalls), or try tracing
just some (-e *sleep).
. Attach a filter function to a kernel function, returning when it should
be considered, i.e. appear on the output:
$ cat tools/perf/examples/bpf/5sec.c
#include <bpf.h>
SEC("func=hrtimer_nanosleep rqtp->tv_sec")
int func(void *ctx, int err, long sec)
{
return sec == 5;
}
char _license[] SEC("license") = "GPL";
int _version SEC("version") = LINUX_VERSION_CODE;
$
. Run it system wide, so that any sleep of >= 5 seconds and < than 6
seconds gets caught.
. Ask for callgraphs using DWARF info, so that userspace can be unwound
. While this is running, run something like "sleep 5s".
# perf trace --no-syscalls -e tools/perf/examples/bpf/5sec.c/call-graph=dwarf/
0.000 perf_bpf_probe:func:(ffffffff9811b5f0) tv_sec=5
hrtimer_nanosleep ([kernel.kallsyms])
__x64_sys_nanosleep ([kernel.kallsyms])
do_syscall_64 ([kernel.kallsyms])
entry_SYSCALL_64 ([kernel.kallsyms])
__GI___nanosleep (/usr/lib64/libc-2.26.so)
rpl_nanosleep (/usr/bin/sleep)
xnanosleep (/usr/bin/sleep)
main (/usr/bin/sleep)
__libc_start_main (/usr/lib64/libc-2.26.so)
_start (/usr/bin/sleep)
^C#
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: David Ahern <dsahern@gmail.com >
Cc: Jiri Olsa <jolsa@kernel.org >
Cc: Namhyung Kim <namhyung@kernel.org >
Cc: Wang Nan <wangnan0@huawei.com >
Link: https://lkml.kernel.org/n/tip-2nmxth2l2h09f9gy85lyexcq@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 14:31:24 -03:00
Arnaldo Carvalho de Melo
dd8e4ead6e
perf bpf: Add bpf.h to be used in eBPF proggies
...
So, the first helper is the one shortening a variable/function section
attribute, from, for instance:
char _license[] __attribute__((section("license"), used)) = "GPL";
to:
char _license[] SEC("license") = "GPL";
Convert empty.c to that and it becomes:
# cat ~acme/lib/examples/perf/bpf/empty.c
#include <bpf.h>
char _license[] SEC("license") = "GPL";
int _version SEC("version") = LINUX_VERSION_CODE;
#
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: David Ahern <dsahern@gmail.com >
Cc: Jiri Olsa <jolsa@kernel.org >
Cc: Namhyung Kim <namhyung@kernel.org >
Cc: Wang Nan <wangnan0@huawei.com >
Link: https://lkml.kernel.org/n/tip-zmeg52dlvy51rdlhyumfl5yf@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 14:31:23 -03:00
Arnaldo Carvalho de Melo
8f12a2ff00
perf bpf: Add 'examples' directories
...
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: David Ahern <dsahern@gmail.com >
Cc: Jiri Olsa <jolsa@kernel.org >
Cc: Namhyung Kim <namhyung@kernel.org >
Cc: Wang Nan <wangnan0@huawei.com >
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 14:31:23 -03:00
Arnaldo Carvalho de Melo
1b16fffa38
perf llvm-utils: Add bpf include path to clang command line
...
We'll start putting headers for helpers to be used in eBPF proggies in
there:
# perf trace -v --no-syscalls -e empty.c |& grep "llvm compiling command : "
llvm compiling command : /usr/lib64/ccache/clang -D__KERNEL__ -D__NR_CPUS__=4 -DLINUX_VERSION_CODE=0x41100 -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/7/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 -I/home/acme/lib/include/perf/bpf -Wno-unused-value -Wno-pointer-sign -working-directory /lib/modules/4.17.0-rc3-00034-gf4ef6a438cee/build -c /home/acme/bpf/empty.c -target bpf -O2 -o -
#
Notice the "-I/home/acme/lib/include/perf/bpf"
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: David Ahern <dsahern@gmail.com >
Cc: Jiri Olsa <jolsa@kernel.org >
Cc: Namhyung Kim <namhyung@kernel.org >
Cc: Wang Nan <wangnan0@huawei.com >
Link: https://lkml.kernel.org/n/tip-6xq94xro8xlb5s9urznh3f9k@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 14:31:17 -03:00
Ravi Bangoria
d8ed87bc17
perf buildid-cache: Warn --purge-all failures
...
Warn perf buildid-cache --purge-all failures in non verbose mode.
Ex.:
$ sudo chown root:root /home/ravi/.debug -R
$ sudo chmod 700 /home/ravi/.debug/ -R
$ ./perf buildid-cache -P
Couldn't remove some caches. Error: Permission denied.
Suggested-by: Masami Hiramatsu <mhiramat@kernel.org >
Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com >
Acked-by: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Jiri Olsa <jolsa@redhat.com >
Cc: Namhyung Kim <namhyung@kernel.org >
Link: http://lkml.kernel.org/r/20180510043651.12189-1-ravi.bangoria@linux.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 10:32:16 -03:00
Arnaldo Carvalho de Melo
b3f58c8da6
perf tests parse-events: Add intel_pt parse test
...
To avoid regressions such as the one fixed by 4a35a9027f
("Revert
"perf pmu: Fix pmu events parsing rule""), where '-e intel_pt//u' got
broken, with this new entry in this 'perf tests' subtest, we would have
caught it before pushing upstream.
Acked-by: Jiri Olsa <jolsa@kernel.org >
Cc: Adrian Hunter <adrian.hunter@intel.com >
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com >
Cc: Andi Kleen <ak@linux.intel.com >
Cc: David Ahern <dsahern@gmail.com >
Cc: Jiri Olsa <jolsa@kernel.org >
Cc: Kan Liang <kan.liang@linux.intel.com >
Cc: Namhyung Kim <namhyung@kernel.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Wang Nan <wangnan0@huawei.com >
Link: https://lkml.kernel.org/n/tip-kw62fys9bwdgsp722so2ln1l@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 10:31:59 -03:00
Arnaldo Carvalho de Melo
291c161f6c
Merge remote-tracking branch 'tip/perf/urgent' into perf/core
...
To pick up fixes, notably the revert for the intel_pt//u regression.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
2018-05-15 10:30:17 -03:00
Alexei Starovoitov
f2467c2dbc
selftests/bpf: make sure build-id is on
...
--build-id may not be a default linker config.
Make sure it's used when linking urandom_read test program.
Otherwise test_stacktrace_build_id[_nmi] tests will be failling.
Signed-off-by: Alexei Starovoitov <ast@kernel.org >
Acked-by: Yonghong Song <yhs@fb.com >
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net >
2018-05-15 10:07:44 +02:00
Ingo Molnar
f3903c9161
Merge tag 'perf-urgent-for-mingo-4.17-20180514' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
...
Pull perf/urgent fixes from Arnaldo Carvalho de Melo:
- Fix segfault when processing unknown threads in cs-etm (Leo Yan)
- Fix "perf test inet_pton" on s390 failing due to missing inline (Thomas Richter)
- Display all available events on 'perf annotate --stdio' (Jin Yao)
- Add missing newline when parsing empty BPF proggie (Arnaldo Carvalho de Melo)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:20:45 +02:00
Andrea Parri
99c12749b1
tools/memory-model: Add reference for 'Simplifying ARM concurrency'
...
The paper discusses the revised ARMv8 memory model; such revision
had an important impact on the design of the LKMM.
Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-19-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:19 +02:00
Andrea Parri
1a00b4554d
tools/memory-model: Update ASPLOS information
...
ASPLOS 2018 was held in March: make sure this is reflected in
header comments and references.
Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-18-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:18 +02:00
Andrea Parri
05604e7e3a
tools/memory-model: Fix coding style in 'lock.cat'
...
This commit uses tabs for indentation and adds spaces around binary
operator.
Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: stern@rowland.harvard.edu
Link: http://lkml.kernel.org/r/1526340837-12222-16-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:18 +02:00
Alan Stern
cee0321a40
tools/memory-model: Remove out-of-date comments and code from lock.cat
...
lock.cat contains old comments and code referring to the possibility
of LKR events that are not part of an RMW pair. This is a holdover
from when I though we might end up using LKR events to implement
spin_is_locked(). Reword the comments to remove this assumption and
replace domain(lk-rmw) in the code with LKR.
Tested-by: Andrea Parri <andrea.parri@amarulasolutions.com >
[ paulmck: Pulled as lock-nest into previous line as discussed. ]
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-15-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:18 +02:00
Alan Stern
30b795df11
tools/memory-model: Improve mixed-access checking in lock.cat
...
The code in lock.cat which checks for normal read/write accesses to
spinlock variables doesn't take into account the newly added RL and RU
events. Add them into the test, and move the resulting code up near
the start of the file, since a violation would indicate a pretty
severe conceptual error in a litmus test.
Tested-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-14-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:18 +02:00
Alan Stern
fd0359dbac
tools/memory-model: Improve comments in lock.cat
...
This patch improves the comments in tools/memory-model/lock.cat. In
addition to making the text more uniform and removing redundant
comments, it adds a description of all the possible locking events
that herd can generate.
Tested-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-13-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:18 +02:00
Alan Stern
8559183cca
tools/memory-model: Remove duplicated code from lock.cat
...
This patch simplifies the implementation of spin_is_locked in the
LKMM. It capitalizes on the fact that a failed spin_trylock() and a
spin_is_locked() which returns True have exactly the same semantics
(those of READ_ONCE) and ordering properties (none). Therefore the
two kinds of events can be combined and handled by the same code,
instead of treated separately as they are currently.
Tested-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-12-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:17 +02:00
Paul E. McKenney
1bd3742043
tools/memory-model: Flag "cumulativity" and "propagation" tests
...
This commit flags WRC+pooncerelease+rmbonceonce+Once.litmus
as being forbidden by smp_store_release() A-cumulativity and
IRIW+mbonceonces+OnceOnce.litmus as being forbidden by the LKMM
propagation rule.
Suggested-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Reported-by: Paolo Bonzini <pbonzini@redhat.com >
[ paulmck: Updated wording as suggested by Alan Stern. ]
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Acked-by: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-11-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:17 +02:00
Luc Maranget
15553dcbca
tools/memory-model: Add model support for spin_is_locked()
...
This commit first adds a trivial macro for spin_is_locked() to
linux-kernel.def.
It also adds cat code for enumerating all possible matches of lock
write events (set LKW) with islocked events returning true (set RL,
for Read from Lock), and unlock write events (set UL) with islocked
events returning false (set RU, for Read from Unlock). Note that this
intentionally does not model uniprocessor kernels (CONFIG_SMP=n) built
with CONFIG_DEBUG_SPINLOCK=n, in which spin_is_locked() unconditionally
returns zero.
It also adds a pair of litmus tests demonstrating the minimal ordering
provided by spin_is_locked() in conjunction with spin_lock(). Will Deacon
noted that this minimal ordering happens on ARMv8:
https://lkml.kernel.org/r/20180226162426.GB17158@arm.com
Notice that herd7 installations strictly older than version 7.49
do not handle the new constructs.
Signed-off-by: Luc Maranget <luc.maranget@inria.fr >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Reviewed-by: Alan Stern <stern@rowland.harvard.edu >
Cc: Akira Yokosawa <akiyks@gmail.com >
Cc: Andrea Parri <parri.andrea@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <Luc.Maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Link: http://lkml.kernel.org/r/1526340837-12222-10-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:17 +02:00
Paul E. McKenney
2fb6ae162f
tools/memory-model: Add scripts to test memory model
...
This commit adds a pair of scripts that run the memory model on litmus
tests, checking that the verification result of each litmus test matches
the result flagged in the litmus test itself. These scripts permit easier
checking of changes to the memory model against preconceived notions.
To run the scripts, go to the tools/memory-model directory and type
"scripts/checkalllitmus.sh". If all is well, the last line printed will
be "All litmus tests verified as was expected."
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: stern@rowland.harvard.edu
Link: http://lkml.kernel.org/r/1526340837-12222-9-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:17 +02:00
Andrea Parri
d17013e0ba
tools/memory-model: Fix coding style in 'linux-kernel.def'
...
This commit fixes white spaces around semicolons.
Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: stern@rowland.harvard.edu
Link: http://lkml.kernel.org/r/1526340837-12222-8-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:17 +02:00
Andrea Parri
bf8c6d963d
tools/memory-model: Model 'smp_store_mb()'
...
This commit models 'smp_store_mb(x, val);' to be semantically equivalent
to 'WRITE_ONCE(x, val); smp_mb();'.
Suggested-by: Paolo Bonzini <pbonzini@redhat.com >
Suggested-by: Peter Zijlstra <peterz@infradead.org >
Signed-off-by: Andrea Parri <andrea.parri@amarulasolutions.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Acked-by: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-7-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Paul E. McKenney
bfd403bb36
tools/memory-order: Update the cheat-sheet to show that smp_mb__after_atomic() orders later RMW operations
...
The current cheat sheet does not claim that smp_mb__after_atomic()
orders later RMW atomic operations, which it must, at least against
earlier RMW atomic operations and whatever precedes them.
This commit therefore adds the needed "Y".
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Acked-by: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-6-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Paul E. McKenney
35bb6ee679
tools/memory-order: Improve key for SELF and SV
...
The key for "SELF" was missing completely and the key for "SV" was
a bit obtuse. This commit therefore adds a key for "SELF" and improves
the one for "SV".
Reported-by: Paolo Bonzini <pbonzini@redhat.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Acked-by: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-5-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Paolo Bonzini
a839195186
tools/memory-model: Fix cheat sheet typo
...
"RWM" should be "RMW".
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: stern@rowland.harvard.edu
Link: http://lkml.kernel.org/r/1526340837-12222-4-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Akira Yokosawa
5b62832c1e
tools/memory-model: Update required version of herdtools7
...
Code generated by klitmus7 version 7.48 doesn't compile with kernel
header of 4.15 and later due to the absence of ACCESS_ONCE().
As the issue has been resolved in herdtools7 7.49, bump the required
version number in README.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Cc: Alan Stern <stern@rowland.harvard.edu >
Cc: Andrea Parri <parri.andrea@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Boqun Feng <boqun.feng@gmail.com >
Cc: David Howells <dhowells@redhat.com >
Cc: Jade Alglave <j.alglave@ucl.ac.uk >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Luc Maranget <luc.maranget@inria.fr >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: linux-arch@vger.kernel.org
Link: http://lkml.kernel.org/r/1526340837-12222-3-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Alan Stern
9d036883a1
tools/memory-model: Redefine rb in terms of rcu-fence
...
This patch reorganizes the definition of rb in the Linux Kernel Memory
Consistency Model. The relation is now expressed in terms of
rcu-fence, which consists of a sequence of gp and rscs links separated
by rcu-link links, in which the number of occurrences of gp is >= the
number of occurrences of rscs.
Arguments similar to those published in
http://diy.inria.fr/linux/long.pdf show that rcu-fence behaves like an
inter-CPU strong fence. Furthermore, the definition of rb in terms of
rcu-fence is highly analogous to the definition of pb in terms of
strong-fence, which can help explain why rcu-path expresses a form of
temporal ordering.
This change should not affect the semantics of the memory model, just
its internal organization.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Reviewed-by: Boqun Feng <boqun.feng@gmail.com >
Reviewed-by: Andrea Parri <parri.andrea@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-2-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:16 +02:00
Alan Stern
1ee2da5f9b
tools/memory-model: Rename link and rcu-path to rcu-link and rb
...
This patch makes a simple non-functional change to the RCU portion of
the Linux Kernel Memory Consistency Model by renaming the "link" and
"rcu-path" relations to "rcu-link" and "rb", respectively.
The name "link" was an unfortunate choice, because it was too generic
and subject to confusion with other meanings of the same word, which
occur quite often in LKMM documentation. The name "rcu-path" is not
very appropriate, because the relation is analogous to the
happens-before (hb) and propagates-before (pb) relations -- although
that fact won't become apparent until the second patch in this series.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu >
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com >
Acked-by: Andrea Parri <parri.andrea@gmail.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Will Deacon <will.deacon@arm.com >
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Link: http://lkml.kernel.org/r/1526340837-12222-1-git-send-email-paulmck@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 08:11:15 +02:00
Josh Poimboeuf
6f5ec2993b
objtool: Detect RIP-relative switch table references
...
Typically a switch table can be found by detecting a .rodata access
followed an indirect jump:
1969: 4a 8b 0c e5 00 00 00 mov 0x0(,%r12,8),%rcx
1970: 00
196d: R_X86_64_32S .rodata+0x438
1971: e9 00 00 00 00 jmpq 1976 <dispc_runtime_suspend+0xb6a>
1972: R_X86_64_PC32 __x86_indirect_thunk_rcx-0x4
Randy Dunlap reported a case (seen with GCC 4.8) where the .rodata
access uses RIP-relative addressing:
19bd: 48 8b 3d 00 00 00 00 mov 0x0(%rip),%rdi # 19c4 <dispc_runtime_suspend+0xbb8>
19c0: R_X86_64_PC32 .rodata+0x45c
19c4: e9 00 00 00 00 jmpq 19c9 <dispc_runtime_suspend+0xbbd>
19c5: R_X86_64_PC32 __x86_indirect_thunk_rdi-0x4
In this case the relocation addend needs to be adjusted accordingly in
order to find the location of the switch table.
The fix is for case 3 (as described in the comments), but also make the
existing case 1 & 2 checks more precise by only adjusting the addend for
R_X86_64_PC32 relocations.
This fixes the following warnings:
drivers/video/fbdev/omap2/omapfb/dss/dispc.o: warning: objtool: dispc_runtime_suspend()+0xbb8: sibling call from callable instruction with modified stack frame
drivers/video/fbdev/omap2/omapfb/dss/dispc.o: warning: objtool: dispc_runtime_resume()+0xcc5: sibling call from callable instruction with modified stack frame
Reported-by: Randy Dunlap <rdunlap@infradead.org >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/b6098294fd67afb69af8c47c9883d7a68bf0f8ea.1526305958.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-15 07:30:59 +02:00
Daniel Borkmann
a82d8cd398
bpf: add ld64 imm test cases
...
Add test cases where we combine semi-random imm values, mainly for testing
JITs when they have different encoding options for 64 bit immediates in
order to reduce resulting image size.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net >
Signed-off-by: Alexei Starovoitov <ast@kernel.org >
2018-05-14 19:11:45 -07:00
Song Liu
13790d1cc7
bpf: add selftest for stackmap with build_id in NMI context
...
This new test captures stackmap with build_id with hardware event
PERF_COUNT_HW_CPU_CYCLES.
Because we only support one ips-to-build_id lookup per cpu in NMI
context, stack_amap will not be able to do the lookup in this test.
Therefore, we didn't do compare_stack_ips(), as it will alwasy fail.
urandom_read.c is extended to run configurable cycles so that it can be
caught by the perf event.
Signed-off-by: Song Liu <songliubraving@fb.com >
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net >
2018-05-14 23:29:45 +02:00
Nicholas Piggin
c906d2c74e
selftests/powerpc: fix exec benchmark
...
The exec_target binary could segfault calling _exit(2) because r13
is not set up properly (and libc looks at that when performing a
syscall). Call SYS_exit using syscall(2) which doesn't seem to
have this problem.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com >
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au >
2018-05-14 23:10:33 +10:00
Dave Hansen
3488a600d9
x86/pkeys/selftests: Add a test for pkey 0
...
Protection key 0 is the default key for all memory and will
not normally come back from pkey_alloc(). But, you might
still want pass it to mprotect_pkey().
This check ensures that you can use pkey 0.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171356.9E40B254@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
acb25d761d
x86/pkeys/selftests: Save off 'prot' for allocations
...
This makes it possible to to tell what 'prot' a given allocation
is supposed to have. That way, if we want to change just the
pkey, we know what 'prot' to pass to mprotect_pkey().
Also, keep a record of the most recent allocation so the tests
can easily find it.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171354.AA23E228@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
3d64f4ed15
x86/pkeys/selftests: Fix pointer math
...
We dump out the entire area of the siginfo where the si_pkey_ptr is
supposed to be. But, we do some math on the poitner, which is a u32.
We intended to do byte math, not u32 math on the pointer.
Cast it over to a u8* so it works.
Also, move this block of code to below th si_code check. It doesn't
hurt anything, but the si_pkey field is gibberish for other signal
types.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171352.9BE09819@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
f50b487832
x86/pkeys/selftests: Fix pkey exhaustion test off-by-one
...
In our "exhaust all pkeys" test, we make sure that there
is the expected number available. Turns out that the
test did not cover the execute-only key, but discussed
it anyway. It did *not* discuss the test-allocated
key.
Now that we have a test for the mprotect(PROT_EXEC) case,
this off-by-one issue showed itself. Correct the off-by-
one and add the explanation for the case we missed.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171350.E1656B95@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
6af17cf89e
x86/pkeys/selftests: Add PROT_EXEC test
...
Under the covers, implement executable-only memory with
protection keys when userspace calls mprotect(PROT_EXEC).
But, we did not have a selftest for that. Now we do.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171348.9EEE4BEF@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
3fcd2b2d92
x86/pkeys/selftests: Factor out "instruction page"
...
We currently have an execute-only test, but it is for
the explicit mprotect_pkey() interface. We will soon
add a test for the implicit mprotect(PROT_EXEC)
enterface. We need this code in both tests.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171347.C64AB733@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
7e7fd67ca3
x86/pkeys/selftests: Allow faults on unknown keys
...
The exec-only pkey is allocated inside the kernel and userspace
is not told what it is. So, allow PK faults to occur that have
an unknown key.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171345.7FC7DA00@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
caf9eb6b4c
x86/pkeys/selftests: Avoid printf-in-signal deadlocks
...
printf() and friends are unusable in signal handlers. They deadlock.
The pkey selftest does not do any normal printing in signal handlers,
only extra debugging. So, just print the format string so we get
*some* output when debugging.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171344.C53FD2F3@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
a50093d604
x86/pkeys/selftests: Remove dead debugging code, fix dprint_in_signal
...
There is some noisy debug code at the end of the signal handler. It was
disabled by an early, unconditional "return". However, that return also
hid a dprint_in_signal=0, which kept dprint_in_signal=1 and effectively
locked us into permanent dprint_in_signal=1 behavior.
Remove the return and the dead code, fixing dprint_in_signal.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171342.846B9B2E@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
86b9eea230
x86/pkeys/selftests: Stop using assert()
...
If we use assert(), the program "crashes". That can be scary to users,
so stop doing it. Just exit with a >0 exit code instead.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171340.E63EF7DA@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Dave Hansen
55556b0b20
x86/pkeys/selftests: Give better unexpected fault error messages
...
do_not_expect_pk_fault() is a helper that we call when we do not expect
a PK fault to have occurred. But, it is a function, which means that
it obscures the line numbers from pkey_assert(). It also gives no
details.
Replace it with an implementation that gives nice line numbers and
also lets callers pass in a more descriptive message about what
happened that caused the unexpected fault.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Dave Hansen <dave.hansen@intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Michael Ellermen <mpe@ellerman.id.au >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Ram Pai <linuxram@us.ibm.com >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180509171338.55D13B64@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Andy Lutomirski
59c2a7226f
x86/selftests: Add mov_to_ss test
...
This exercises a nasty corner case of the x86 ISA.
Signed-off-by: Andy Lutomirski <luto@kernel.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/67e08b69817171da8026e0eb3af0214b06b4d74f.1525800455.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Ingo Molnar
73bb4d6cd1
x86/mpx/selftests: Adjust the self-test to fresh distros that export the MPX ABI
...
Fix this warning:
mpx-mini-test.c:422:0: warning: "SEGV_BNDERR" redefined
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: akpm@linux-foundation.org
Cc: dave.hansen@intel.com
Cc: linux-mm@kvack.org
Cc: linuxram@us.ibm.com
Cc: mpe@ellerman.id.au
Cc: shakeelb@google.com
Cc: shuah@kernel.org
Link: http://lkml.kernel.org/r/20180514085908.GA12798@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Ingo Molnar
0fb96620dc
x86/pkeys/selftests: Adjust the self-test to fresh distros that export the pkeys ABI
...
Ubuntu 18.04 started exporting pkeys details in header files, resulting
in build failures and warnings in the pkeys self-tests:
protection_keys.c:232:0: warning: "SEGV_BNDERR" redefined
protection_keys.c:387:5: error: conflicting types for ‘pkey_get’
protection_keys.c:409:5: error: conflicting types for ‘pkey_set’
...
Fix these namespace conflicts and double definitions, plus also
clean up the ABI definitions to make it all a bit more readable ...
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: akpm@linux-foundation.org
Cc: dave.hansen@intel.com
Cc: linux-mm@kvack.org
Cc: linuxram@us.ibm.com
Cc: mpe@ellerman.id.au
Cc: shakeelb@google.com
Cc: shuah@kernel.org
Link: http://lkml.kernel.org/r/20180514085623.GB7094@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 11:14:45 +02:00
Josh Poimboeuf
fd35c88b74
objtool: Support GCC 8 switch tables
...
With GCC 8, some issues were found with the objtool switch table
detection.
1) In the .rodata section, immediately after the switch table, there can
be another object which contains a pointer to the function which had
the switch statement. In this case objtool wrongly considers the
function pointer to be part of the switch table. Fix it by:
a) making sure there are no pointers to the beginning of the
function; and
b) making sure there are no gaps in the switch table.
Only the former was needed, the latter adds additional protection for
future optimizations.
2) In find_switch_table(), case 1 and case 2 are missing the check to
ensure that the .rodata switch table data is anonymous, i.e. that it
isn't already associated with an ELF symbol. Fix it by adding the
same find_symbol_containing() check which is used for case 3.
This fixes the following warnings with GCC 8:
drivers/block/virtio_blk.o: warning: objtool: virtio_queue_rq()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+72
net/ipv6/icmp.o: warning: objtool: icmpv6_rcv()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+64
drivers/usb/core/quirks.o: warning: objtool: quirks_param_set()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+48
drivers/mtd/nand/raw/nand_hynix.o: warning: objtool: hynix_nand_decode_id()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+24
drivers/mtd/nand/raw/nand_samsung.o: warning: objtool: samsung_nand_decode_id()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+32
drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o: warning: objtool: gk104_top_oneinit()+0x0: stack state mismatch: cfa1=7+8 cfa2=7+64
Reported-by: Arnd Bergmann <arnd@arndb.de >
Reported-by: kbuild test robot <lkp@intel.com >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: David Laight <David.Laight@ACULAB.COM >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: damian <damian.tometzki@icloud.com >
Link: http://lkml.kernel.org/r/20180510224849.xwi34d6tzheb5wgw@treble
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 10:20:54 +02:00
Josh Poimboeuf
13810435b9
objtool: Support GCC 8's cold subfunctions
...
GCC 8 moves a lot of unlikely code out of line to "cold" subfunctions in
.text.unlikely. Properly detect the new subfunctions and treat them as
extensions of the original functions.
This fixes a bunch of warnings like:
kernel/cgroup/cgroup.o: warning: objtool: parse_cgroup_root_flags()+0x33: sibling call from callable instruction with modified stack frame
kernel/cgroup/cgroup.o: warning: objtool: cgroup_addrm_files()+0x290: sibling call from callable instruction with modified stack frame
kernel/cgroup/cgroup.o: warning: objtool: cgroup_apply_control_enable()+0x25b: sibling call from callable instruction with modified stack frame
kernel/cgroup/cgroup.o: warning: objtool: rebind_subsystems()+0x325: sibling call from callable instruction with modified stack frame
Reported-and-tested-by: damian <damian.tometzki@icloud.com >
Reported-by: Arnd Bergmann <arnd@arndb.de >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: David Laight <David.Laight@ACULAB.COM >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Randy Dunlap <rdunlap@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/0965e7fcfc5f31a276f0c7f298ff770c19b68706.1525923412.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 10:20:53 +02:00
Josh Poimboeuf
0afd0d9e0e
objtool: Fix "noreturn" detection for recursive sibling calls
...
Objtool has some crude logic for detecting static "noreturn" functions
(aka "dead ends"). This is necessary for being able to correctly follow
GCC code flow when such functions are called.
It's remotely possible for two functions to call each other via sibling
calls. If they don't have RET instructions, objtool's noreturn
detection logic goes into a recursive loop:
drivers/char/ipmi/ipmi_ssif.o: warning: objtool: return_hosed_msg()+0x0: infinite recursion (objtool bug!)
drivers/char/ipmi/ipmi_ssif.o: warning: objtool: deliver_recv_msg()+0x0: infinite recursion (objtool bug!)
Instead of reporting an error in this case, consider the functions to be
non-dead-ends.
Reported-and-tested-by: Randy Dunlap <rdunlap@infradead.org >
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com >
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: Arnd Bergmann <arnd@arndb.de >
Cc: David Laight <David.Laight@ACULAB.COM >
Cc: Greg KH <gregkh@linuxfoundation.org >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: damian <damian.tometzki@icloud.com >
Link: http://lkml.kernel.org/r/7cc156408c5781a1f62085d352ced1fe39fe2f91.1525923412.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 10:20:53 +02:00
Ingo Molnar
4fe875e4bd
objtool, kprobes/x86: Sync the latest <asm/insn.h> header with tools/objtool/arch/x86/include/asm/insn.h
...
The following commit:
ee6a7354a3
: kprobes/x86: Prohibit probing on exception masking instructions
Modified <asm/insn.h>, adding the insn_masking_exception() function.
Sync the tooling version of the header to it, to fix this warning:
Warning: synced file at 'tools/objtool/arch/x86/include/asm/insn.h' differs from latest kernel version at 'arch/x86/include/asm/insn.h'
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Josh Poimboeuf <jpoimboe@redhat.com >
Cc: Masami Hiramatsu <mhiramat@kernel.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Ricardo Neri <ricardo.neri-calderon@linux.intel.com >
Cc: Francis Deslauriers <francis.deslauriers@efficios.com >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Alexei Starovoitov <ast@kernel.org >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Andy Lutomirski <luto@kernel.org >
Cc: "H . Peter Anvin" <hpa@zytor.com >
Cc: Yonghong Song <yhs@fb.com >
Cc: Borislav Petkov <bp@suse.de >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: "David S . Miller" <davem@davemloft.net >
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2018-05-14 10:15:54 +02:00
David S. Miller
9d6b4bfb59
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
...
Daniel Borkmann says:
====================
pull-request: bpf 2018-05-14
The following pull-request contains BPF updates for your *net* tree.
The main changes are:
1) Fix nfp to allow zero-length BPF capabilities, meaning the nfp
capability parsing loop will otherwise exit early if the last
capability is zero length and therefore driver will fail to probe
with an error such as:
nfp: BPF capabilities left after parsing, parsed:92 total length:100
nfp: invalid BPF capabilities at offset:92
Fix from Jakub.
2) libbpf's bpf_object__open() may return IS_ERR_OR_NULL() and not
just an error. Fix libbpf's bpf_prog_load_xattr() to handle that
case as well, also from Jakub.
====================
Signed-off-by: David S. Miller <davem@davemloft.net >
2018-05-13 21:07:02 -04:00