ftrace/selftests: Return the skip code when tracing directory not configured in kernel
If the kernel is not configured with ftrace enabled, the ftracetest selftests should return the error code of "4" as that is the kselftests "skip" code, and not "1" which means an error. To determine if ftrace is enabled, first the newer "tracefs" is searched for in /proc/mounts. If it is not found, then "debugfs" is searched for (as old kernels do not have tracefs). If that is not found, an attempt to mount the tracefs or debugfs is performed. This is done by seeing first if the /sys/kernel/tracing directory exists. If it does than tracefs is configured in the kernel and an attempt to mount it is performed. If /sys/kernel/tracing does not exist, then /sys/kernel/debug is tested to see if that directory exists. If it does, then an attempt to mount debugfs on that directory is performed. If it does not exist, then debugfs is not configured in the running kernel and the test exits with the skip code. If either mount fails, then a normal error is returned as they do exist in the kernel but something went wrong to mount them. This changes the test to always try the tracefs file system first as it has been in the kernel for some time now and it is better to test it if it is available instead of always testing debugfs. Link: http://lkml.kernel.org/r/20190702062358.7330-1-po-hsu.lin@canonical.com Reported-by: Po-Hsu Lin <po-hsu.lin@canonical.com> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
715fa2fd4c
commit
cbd965bde7
|
@ -23,9 +23,15 @@ echo " If <dir> is -, all logs output in console only"
|
|||
exit $1
|
||||
}
|
||||
|
||||
# default error
|
||||
err_ret=1
|
||||
|
||||
# kselftest skip code is 4
|
||||
err_skip=4
|
||||
|
||||
errexit() { # message
|
||||
echo "Error: $1" 1>&2
|
||||
exit 1
|
||||
exit $err_ret
|
||||
}
|
||||
|
||||
# Ensuring user privilege
|
||||
|
@ -116,11 +122,31 @@ parse_opts() { # opts
|
|||
}
|
||||
|
||||
# Parameters
|
||||
DEBUGFS_DIR=`grep debugfs /proc/mounts | cut -f2 -d' ' | head -1`
|
||||
if [ -z "$DEBUGFS_DIR" ]; then
|
||||
TRACING_DIR=`grep tracefs /proc/mounts | cut -f2 -d' ' | head -1`
|
||||
else
|
||||
TRACING_DIR=$DEBUGFS_DIR/tracing
|
||||
TRACING_DIR=`grep tracefs /proc/mounts | cut -f2 -d' ' | head -1`
|
||||
if [ -z "$TRACING_DIR" ]; then
|
||||
DEBUGFS_DIR=`grep debugfs /proc/mounts | cut -f2 -d' ' | head -1`
|
||||
if [ -z "$DEBUGFS_DIR" ]; then
|
||||
# If tracefs exists, then so does /sys/kernel/tracing
|
||||
if [ -d "/sys/kernel/tracing" ]; then
|
||||
mount -t tracefs nodev /sys/kernel/tracing ||
|
||||
errexit "Failed to mount /sys/kernel/tracing"
|
||||
TRACING_DIR="/sys/kernel/tracing"
|
||||
# If debugfs exists, then so does /sys/kernel/debug
|
||||
elif [ -d "/sys/kernel/debug" ]; then
|
||||
mount -t debugfs nodev /sys/kernel/debug ||
|
||||
errexit "Failed to mount /sys/kernel/debug"
|
||||
TRACING_DIR="/sys/kernel/debug/tracing"
|
||||
else
|
||||
err_ret=$err_skip
|
||||
errexit "debugfs and tracefs are not configured in this kernel"
|
||||
fi
|
||||
else
|
||||
TRACING_DIR="$DEBUGFS_DIR/tracing"
|
||||
fi
|
||||
fi
|
||||
if [ ! -d "$TRACING_DIR" ]; then
|
||||
err_ret=$err_skip
|
||||
errexit "ftrace is not configured in this kernel"
|
||||
fi
|
||||
|
||||
TOP_DIR=`absdir $0`
|
||||
|
|
Loading…
Reference in New Issue