50 lines
1.0 KiB
Bash
Executable File
50 lines
1.0 KiB
Bash
Executable File
#!/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
|