Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbd965bd authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware)
Browse files

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: default avatarPo-Hsu Lin <po-hsu.lin@canonical.com>
Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 715fa2fd
Loading
Loading
Loading
Loading
+32 −6
Original line number Diff line number Diff line
@@ -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
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
    TRACING_DIR=`grep tracefs /proc/mounts | cut -f2 -d' ' | head -1`
	# 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
    TRACING_DIR=$DEBUGFS_DIR/tracing
	    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`