selftests/powerpc: New TM signal self test
authorBreno Leitao <leitao@debian.org>
Tue, 8 Jan 2019 11:31:21 +0000 (09:31 -0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 15 Jan 2019 00:17:09 +0000 (11:17 +1100)
commita65329aa7d613288626275546074f1aae5a04965
treeee6b360c3b3519fde8d93196cafeb7704c5a454f
parent8de7547e03059281fda075355c1146941fbbe76f
selftests/powerpc: New TM signal self test

A new self test that forces MSR[TS] to be set without calling any TM
instruction. This test also tries to cause a page fault at a signal
handler, exactly between MSR[TS] set and tm_recheckpoint(), forcing
thread->texasr to be rewritten with TEXASR[FS] = 0, which will cause a BUG
when tm_recheckpoint() is called.

This test is not deterministic, since it is hard to guarantee that the page
access will cause a page fault. In order to force more page faults at
signal context, the signal handler and the ucontext are being mapped into a
MADV_DONTNEED memory chunks.

Tests have shown that the bug could be exposed with few interactions in a
buggy kernel. This test is configured to loop 5000x, having a good chance
to hit the kernel issue in just one run.  This self test takes less than
two seconds to run.

This test uses set/getcontext because the kernel will recheckpoint
zeroed structures, causing the test to segfault, which is undesired because
the test needs to rerun, so, there is a signal handler for SIGSEGV which
will restart the test.

v2: Uses the MADV_DONTNEED memory advice
v3: Fix memcpy and 32-bits compilation
v4: Does not define unused macros

Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
tools/testing/selftests/powerpc/include/reg.h
tools/testing/selftests/powerpc/include/utils.h
tools/testing/selftests/powerpc/tm/.gitignore
tools/testing/selftests/powerpc/tm/Makefile
tools/testing/selftests/powerpc/tm/tm-signal-context-force-tm.c [new file with mode: 0644]