Commit 57d88e8a authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'linux-kselftest-fixes-6.6-rc2' of...

Merge tag 'linux-kselftest-fixes-6.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull more kselftest fixes from Shuah Khan
 "Fixes to user_events test and ftrace test.

  The user_events test was enabled by default in Linux 6.6-rc1. The
  following fixes are for bugs found since then:

   - add checks for dependencies and skip the test if they aren't met.

     The user_events test requires root access, and tracefs and
     user_events enabled. It leaves tracefs mounted and a fix is in
     progress for that missing piece.

   - create user_events test-specific Kconfig fragments

  ftrace test fixes:

   - unmount tracefs for recovering environment. Fix identified during
     the above mentioned user_events dependencies fix.

   - adds softlink to latest log directory improving usage"

* tag 'linux-kselftest-fixes-6.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  selftests: tracing: Fix to unmount tracefs for recovering environment
  selftests: user_events: create test-specific Kconfig fragments
  ftrace/selftests: Add softlink to latest log directory
  selftests/user_events: Fix failures when user_events is not installed
parents d8d7cd65 7e021da8
...@@ -31,6 +31,9 @@ err_ret=1 ...@@ -31,6 +31,9 @@ err_ret=1
# kselftest skip code is 4 # kselftest skip code is 4
err_skip=4 err_skip=4
# umount required
UMOUNT_DIR=""
# cgroup RT scheduling prevents chrt commands from succeeding, which # cgroup RT scheduling prevents chrt commands from succeeding, which
# induces failures in test wakeup tests. Disable for the duration of # induces failures in test wakeup tests. Disable for the duration of
# the tests. # the tests.
...@@ -45,6 +48,9 @@ setup() { ...@@ -45,6 +48,9 @@ setup() {
cleanup() { cleanup() {
echo $sched_rt_runtime_orig > $sched_rt_runtime echo $sched_rt_runtime_orig > $sched_rt_runtime
if [ -n "${UMOUNT_DIR}" ]; then
umount ${UMOUNT_DIR} ||:
fi
} }
errexit() { # message errexit() { # message
...@@ -124,6 +130,7 @@ parse_opts() { # opts ...@@ -124,6 +130,7 @@ parse_opts() { # opts
;; ;;
--logdir|-l) --logdir|-l)
LOG_DIR=$2 LOG_DIR=$2
LINK_PTR=
shift 2 shift 2
;; ;;
*.tc) *.tc)
...@@ -160,11 +167,13 @@ if [ -z "$TRACING_DIR" ]; then ...@@ -160,11 +167,13 @@ if [ -z "$TRACING_DIR" ]; then
mount -t tracefs nodev /sys/kernel/tracing || mount -t tracefs nodev /sys/kernel/tracing ||
errexit "Failed to mount /sys/kernel/tracing" errexit "Failed to mount /sys/kernel/tracing"
TRACING_DIR="/sys/kernel/tracing" TRACING_DIR="/sys/kernel/tracing"
UMOUNT_DIR=${TRACING_DIR}
# If debugfs exists, then so does /sys/kernel/debug # If debugfs exists, then so does /sys/kernel/debug
elif [ -d "/sys/kernel/debug" ]; then elif [ -d "/sys/kernel/debug" ]; then
mount -t debugfs nodev /sys/kernel/debug || mount -t debugfs nodev /sys/kernel/debug ||
errexit "Failed to mount /sys/kernel/debug" errexit "Failed to mount /sys/kernel/debug"
TRACING_DIR="/sys/kernel/debug/tracing" TRACING_DIR="/sys/kernel/debug/tracing"
UMOUNT_DIR=${TRACING_DIR}
else else
err_ret=$err_skip err_ret=$err_skip
errexit "debugfs and tracefs are not configured in this kernel" errexit "debugfs and tracefs are not configured in this kernel"
...@@ -181,7 +190,10 @@ fi ...@@ -181,7 +190,10 @@ fi
TOP_DIR=`absdir $0` TOP_DIR=`absdir $0`
TEST_DIR=$TOP_DIR/test.d TEST_DIR=$TOP_DIR/test.d
TEST_CASES=`find_testcases $TEST_DIR` TEST_CASES=`find_testcases $TEST_DIR`
LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/ LOG_TOP_DIR=$TOP_DIR/logs
LOG_DATE=`date +%Y%m%d-%H%M%S`
LOG_DIR=$LOG_TOP_DIR/$LOG_DATE/
LINK_PTR=$LOG_TOP_DIR/latest
KEEP_LOG=0 KEEP_LOG=0
KTAP=0 KTAP=0
DEBUG=0 DEBUG=0
...@@ -207,6 +219,10 @@ else ...@@ -207,6 +219,10 @@ else
LOG_FILE=$LOG_DIR/ftracetest.log LOG_FILE=$LOG_DIR/ftracetest.log
mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR" mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR"
date > $LOG_FILE date > $LOG_FILE
if [ "x-$LINK_PTR" != "x-" ]; then
unlink $LINK_PTR
ln -fs $LOG_DATE $LINK_PTR
fi
fi fi
# Define text colors # Define text colors
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <asm/unistd.h> #include <asm/unistd.h>
#include "../kselftest_harness.h" #include "../kselftest_harness.h"
#include "user_events_selftests.h"
const char *data_file = "/sys/kernel/tracing/user_events_data"; const char *data_file = "/sys/kernel/tracing/user_events_data";
const char *enable_file = "/sys/kernel/tracing/events/user_events/__abi_event/enable"; const char *enable_file = "/sys/kernel/tracing/events/user_events/__abi_event/enable";
...@@ -93,6 +94,8 @@ FIXTURE(user) { ...@@ -93,6 +94,8 @@ FIXTURE(user) {
}; };
FIXTURE_SETUP(user) { FIXTURE_SETUP(user) {
USER_EVENT_FIXTURE_SETUP(return);
change_event(false); change_event(false);
self->check = 0; self->check = 0;
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <unistd.h> #include <unistd.h>
#include "../kselftest_harness.h" #include "../kselftest_harness.h"
#include "user_events_selftests.h"
const char *abi_file = "/sys/kernel/tracing/user_events_data"; const char *abi_file = "/sys/kernel/tracing/user_events_data";
const char *enable_file = "/sys/kernel/tracing/events/user_events/__test_event/enable"; const char *enable_file = "/sys/kernel/tracing/events/user_events/__test_event/enable";
...@@ -146,6 +147,7 @@ FIXTURE(user) { ...@@ -146,6 +147,7 @@ FIXTURE(user) {
}; };
FIXTURE_SETUP(user) { FIXTURE_SETUP(user) {
USER_EVENT_FIXTURE_SETUP(return);
} }
FIXTURE_TEARDOWN(user) { FIXTURE_TEARDOWN(user) {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <unistd.h> #include <unistd.h>
#include "../kselftest_harness.h" #include "../kselftest_harness.h"
#include "user_events_selftests.h"
const char *data_file = "/sys/kernel/tracing/user_events_data"; const char *data_file = "/sys/kernel/tracing/user_events_data";
const char *status_file = "/sys/kernel/tracing/user_events_status"; const char *status_file = "/sys/kernel/tracing/user_events_status";
...@@ -206,6 +207,8 @@ FIXTURE(user) { ...@@ -206,6 +207,8 @@ FIXTURE(user) {
}; };
FIXTURE_SETUP(user) { FIXTURE_SETUP(user) {
USER_EVENT_FIXTURE_SETUP(return);
self->status_fd = open(status_file, O_RDONLY); self->status_fd = open(status_file, O_RDONLY);
ASSERT_NE(-1, self->status_fd); ASSERT_NE(-1, self->status_fd);
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/unistd.h> #include <asm/unistd.h>
#include "../kselftest_harness.h" #include "../kselftest_harness.h"
#include "user_events_selftests.h"
const char *data_file = "/sys/kernel/tracing/user_events_data"; const char *data_file = "/sys/kernel/tracing/user_events_data";
const char *id_file = "/sys/kernel/tracing/events/user_events/__test_event/id"; const char *id_file = "/sys/kernel/tracing/events/user_events/__test_event/id";
...@@ -113,6 +114,8 @@ FIXTURE(user) { ...@@ -113,6 +114,8 @@ FIXTURE(user) {
}; };
FIXTURE_SETUP(user) { FIXTURE_SETUP(user) {
USER_EVENT_FIXTURE_SETUP(return);
self->data_fd = open(data_file, O_RDWR); self->data_fd = open(data_file, O_RDWR);
ASSERT_NE(-1, self->data_fd); ASSERT_NE(-1, self->data_fd);
} }
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _USER_EVENTS_SELFTESTS_H
#define _USER_EVENTS_SELFTESTS_H
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mount.h>
#include <unistd.h>
#include <errno.h>
#include "../kselftest.h"
static inline bool tracefs_enabled(char **message, bool *fail)
{
struct stat buf;
int ret;
*message = "";
*fail = false;
/* Ensure tracefs is installed */
ret = stat("/sys/kernel/tracing", &buf);
if (ret == -1) {
*message = "Tracefs is not installed";
return false;
}
/* Ensure mounted tracefs */
ret = stat("/sys/kernel/tracing/README", &buf);
if (ret == -1 && errno == ENOENT) {
if (mount(NULL, "/sys/kernel/tracing", "tracefs", 0, NULL) != 0) {
*message = "Cannot mount tracefs";
*fail = true;
return false;
}
ret = stat("/sys/kernel/tracing/README", &buf);
}
if (ret == -1) {
*message = "Cannot access tracefs";
*fail = true;
return false;
}
return true;
}
static inline bool user_events_enabled(char **message, bool *fail)
{
struct stat buf;
int ret;
*message = "";
*fail = false;
if (getuid() != 0) {
*message = "Must be run as root";
*fail = true;
return false;
}
if (!tracefs_enabled(message, fail))
return false;
/* Ensure user_events is installed */
ret = stat("/sys/kernel/tracing/user_events_data", &buf);
if (ret == -1) {
switch (errno) {
case ENOENT:
*message = "user_events is not installed";
return false;
default:
*message = "Cannot access user_events_data";
*fail = true;
return false;
}
}
return true;
}
#define USER_EVENT_FIXTURE_SETUP(statement) do { \
char *message; \
bool fail; \
if (!user_events_enabled(&message, &fail)) { \
if (fail) { \
TH_LOG("Setup failed due to: %s", message); \
ASSERT_FALSE(fail); \
} \
SKIP(statement, "Skipping due to: %s", message); \
} \
} while (0)
#endif /* _USER_EVENTS_SELFTESTS_H */
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