Commit 29e3ea8c authored by Jordan Niethe's avatar Jordan Niethe Committed by Michael Ellerman

selftests/powerpc: Test for spurious kernel memory faults on radix

Previously when mapping kernel memory on radix, no ptesync was
included which would periodically lead to unhandled spurious faults.
Mapping kernel memory is used when code patching with Strict RWX
enabled. As suggested by Chris Riedl, turning ftrace on and off does a
large amount of code patching so is a convenient way to see this kind
of fault.

Add a selftest to try and trigger this kind of a spurious fault. It
tests for 30 seconds which is usually long enough for the issue to
show up.
Signed-off-by: default avatarJordan Niethe <jniethe5@gmail.com>
[mpe: Rename it to better reflect what it does, rather than the symptom]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210208032957.1232102-2-jniethe5@gmail.com
parent b8b2f37c
...@@ -5,6 +5,7 @@ noarg: ...@@ -5,6 +5,7 @@ noarg:
TEST_GEN_PROGS := hugetlb_vs_thp_test subpage_prot prot_sao segv_errors wild_bctr \ TEST_GEN_PROGS := hugetlb_vs_thp_test subpage_prot prot_sao segv_errors wild_bctr \
large_vm_fork_separation bad_accesses pkey_exec_prot \ large_vm_fork_separation bad_accesses pkey_exec_prot \
pkey_siginfo stack_expansion_signal stack_expansion_ldst pkey_siginfo stack_expansion_signal stack_expansion_ldst
TEST_PROGS := stress_code_patching.sh
TEST_GEN_PROGS_EXTENDED := tlbie_test TEST_GEN_PROGS_EXTENDED := tlbie_test
TEST_GEN_FILES := tempfile TEST_GEN_FILES := tempfile
......
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
TIMEOUT=30
DEBUFS_DIR=`cat /proc/mounts | grep debugfs | awk '{print $2}'`
if [ ! -e "$DEBUFS_DIR" ]
then
echo "debugfs not found, skipping" 1>&2
exit 4
fi
if [ ! -e "$DEBUFS_DIR/tracing/current_tracer" ]
then
echo "Tracing files not found, skipping" 1>&2
exit 4
fi
echo "Testing for spurious faults when mapping kernel memory..."
if grep -q "FUNCTION TRACING IS CORRUPTED" "$DEBUFS_DIR/tracing/trace"
then
echo "FAILED: Ftrace already dead. Probably due to a spurious fault" 1>&2
exit 1
fi
dmesg -C
START_TIME=`date +%s`
END_TIME=`expr $START_TIME + $TIMEOUT`
while [ `date +%s` -lt $END_TIME ]
do
echo function > $DEBUFS_DIR/tracing/current_tracer
echo nop > $DEBUFS_DIR/tracing/current_tracer
if dmesg | grep -q 'ftrace bug'
then
break
fi
done
echo nop > $DEBUFS_DIR/tracing/current_tracer
if dmesg | grep -q 'ftrace bug'
then
echo "FAILED: Mapping kernel memory causes spurious faults" 1>&2
exit 1
else
echo "OK: Mapping kernel memory does not cause spurious faults"
exit 0
fi
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment