| 1 | |
| 2 | |
| 3 |
|
| 4 | TIMEOUT=30
|
| 5 |
|
| 6 | DEBUFS_DIR=`cat /proc/mounts | grep debugfs | awk '{print $2}'`
|
| 7 | if [ ! -e "$DEBUFS_DIR" ]
|
| 8 | then
|
| 9 | echo "debugfs not found, skipping" 1>&2
|
| 10 | exit 4
|
| 11 | fi
|
| 12 |
|
| 13 | if [ ! -e "$DEBUFS_DIR/tracing/current_tracer" ]
|
| 14 | then
|
| 15 | echo "Tracing files not found, skipping" 1>&2
|
| 16 | exit 4
|
| 17 | fi
|
| 18 |
|
| 19 |
|
| 20 | echo "Testing for spurious faults when mapping kernel memory..."
|
| 21 |
|
| 22 | if grep -q "FUNCTION TRACING IS CORRUPTED" "$DEBUFS_DIR/tracing/trace"
|
| 23 | then
|
| 24 | echo "FAILED: Ftrace already dead. Probably due to a spurious fault" 1>&2
|
| 25 | exit 1
|
| 26 | fi
|
| 27 |
|
| 28 | dmesg -C
|
| 29 | START_TIME=`date +%s`
|
| 30 | END_TIME=`expr $START_TIME + $TIMEOUT`
|
| 31 | while [ `date +%s` -lt $END_TIME ]
|
| 32 | do
|
| 33 | echo function > $DEBUFS_DIR/tracing/current_tracer
|
| 34 | echo nop > $DEBUFS_DIR/tracing/current_tracer
|
| 35 | if dmesg | grep -q 'ftrace bug'
|
| 36 | then
|
| 37 | break
|
| 38 | fi
|
| 39 | done
|
| 40 |
|
| 41 | echo nop > $DEBUFS_DIR/tracing/current_tracer
|
| 42 | if dmesg | grep -q 'ftrace bug'
|
| 43 | then
|
| 44 | echo "FAILED: Mapping kernel memory causes spurious faults" 1>&2
|
| 45 | exit 1
|
| 46 | else
|
| 47 | echo "OK: Mapping kernel memory does not cause spurious faults"
|
| 48 | exit 0
|
| 49 | fi
|