Skip to content

Commit 57d88e8

Browse files
committed
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
2 parents d8d7cd6 + 7e021da commit 57d88e8

File tree

7 files changed

+129
-1
lines changed

7 files changed

+129
-1
lines changed

tools/testing/selftests/ftrace/ftracetest

+17-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ err_ret=1
3131
# kselftest skip code is 4
3232
err_skip=4
3333

34+
# umount required
35+
UMOUNT_DIR=""
36+
3437
# cgroup RT scheduling prevents chrt commands from succeeding, which
3538
# induces failures in test wakeup tests. Disable for the duration of
3639
# the tests.
@@ -45,6 +48,9 @@ setup() {
4548

4649
cleanup() {
4750
echo $sched_rt_runtime_orig > $sched_rt_runtime
51+
if [ -n "${UMOUNT_DIR}" ]; then
52+
umount ${UMOUNT_DIR} ||:
53+
fi
4854
}
4955

5056
errexit() { # message
@@ -124,6 +130,7 @@ parse_opts() { # opts
124130
;;
125131
--logdir|-l)
126132
LOG_DIR=$2
133+
LINK_PTR=
127134
shift 2
128135
;;
129136
*.tc)
@@ -160,11 +167,13 @@ if [ -z "$TRACING_DIR" ]; then
160167
mount -t tracefs nodev /sys/kernel/tracing ||
161168
errexit "Failed to mount /sys/kernel/tracing"
162169
TRACING_DIR="/sys/kernel/tracing"
170+
UMOUNT_DIR=${TRACING_DIR}
163171
# If debugfs exists, then so does /sys/kernel/debug
164172
elif [ -d "/sys/kernel/debug" ]; then
165173
mount -t debugfs nodev /sys/kernel/debug ||
166174
errexit "Failed to mount /sys/kernel/debug"
167175
TRACING_DIR="/sys/kernel/debug/tracing"
176+
UMOUNT_DIR=${TRACING_DIR}
168177
else
169178
err_ret=$err_skip
170179
errexit "debugfs and tracefs are not configured in this kernel"
@@ -181,7 +190,10 @@ fi
181190
TOP_DIR=`absdir $0`
182191
TEST_DIR=$TOP_DIR/test.d
183192
TEST_CASES=`find_testcases $TEST_DIR`
184-
LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/
193+
LOG_TOP_DIR=$TOP_DIR/logs
194+
LOG_DATE=`date +%Y%m%d-%H%M%S`
195+
LOG_DIR=$LOG_TOP_DIR/$LOG_DATE/
196+
LINK_PTR=$LOG_TOP_DIR/latest
185197
KEEP_LOG=0
186198
KTAP=0
187199
DEBUG=0
@@ -207,6 +219,10 @@ else
207219
LOG_FILE=$LOG_DIR/ftracetest.log
208220
mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR"
209221
date > $LOG_FILE
222+
if [ "x-$LINK_PTR" != "x-" ]; then
223+
unlink $LINK_PTR
224+
ln -fs $LOG_DATE $LINK_PTR
225+
fi
210226
fi
211227

212228
# Define text colors

tools/testing/selftests/user_events/abi_test.c

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <asm/unistd.h>
2020

2121
#include "../kselftest_harness.h"
22+
#include "user_events_selftests.h"
2223

2324
const char *data_file = "/sys/kernel/tracing/user_events_data";
2425
const char *enable_file = "/sys/kernel/tracing/events/user_events/__abi_event/enable";
@@ -93,6 +94,8 @@ FIXTURE(user) {
9394
};
9495

9596
FIXTURE_SETUP(user) {
97+
USER_EVENT_FIXTURE_SETUP(return);
98+
9699
change_event(false);
97100
self->check = 0;
98101
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CONFIG_USER_EVENTS=y

tools/testing/selftests/user_events/dyn_test.c

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <unistd.h>
1616

1717
#include "../kselftest_harness.h"
18+
#include "user_events_selftests.h"
1819

1920
const char *abi_file = "/sys/kernel/tracing/user_events_data";
2021
const char *enable_file = "/sys/kernel/tracing/events/user_events/__test_event/enable";
@@ -146,6 +147,7 @@ FIXTURE(user) {
146147
};
147148

148149
FIXTURE_SETUP(user) {
150+
USER_EVENT_FIXTURE_SETUP(return);
149151
}
150152

151153
FIXTURE_TEARDOWN(user) {

tools/testing/selftests/user_events/ftrace_test.c

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <unistd.h>
1717

1818
#include "../kselftest_harness.h"
19+
#include "user_events_selftests.h"
1920

2021
const char *data_file = "/sys/kernel/tracing/user_events_data";
2122
const char *status_file = "/sys/kernel/tracing/user_events_status";
@@ -206,6 +207,8 @@ FIXTURE(user) {
206207
};
207208

208209
FIXTURE_SETUP(user) {
210+
USER_EVENT_FIXTURE_SETUP(return);
211+
209212
self->status_fd = open(status_file, O_RDONLY);
210213
ASSERT_NE(-1, self->status_fd);
211214

tools/testing/selftests/user_events/perf_test.c

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <asm/unistd.h>
1818

1919
#include "../kselftest_harness.h"
20+
#include "user_events_selftests.h"
2021

2122
const char *data_file = "/sys/kernel/tracing/user_events_data";
2223
const char *id_file = "/sys/kernel/tracing/events/user_events/__test_event/id";
@@ -113,6 +114,8 @@ FIXTURE(user) {
113114
};
114115

115116
FIXTURE_SETUP(user) {
117+
USER_EVENT_FIXTURE_SETUP(return);
118+
116119
self->data_fd = open(data_file, O_RDWR);
117120
ASSERT_NE(-1, self->data_fd);
118121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
#ifndef _USER_EVENTS_SELFTESTS_H
4+
#define _USER_EVENTS_SELFTESTS_H
5+
6+
#include <sys/stat.h>
7+
#include <sys/types.h>
8+
#include <sys/mount.h>
9+
#include <unistd.h>
10+
#include <errno.h>
11+
12+
#include "../kselftest.h"
13+
14+
static inline bool tracefs_enabled(char **message, bool *fail)
15+
{
16+
struct stat buf;
17+
int ret;
18+
19+
*message = "";
20+
*fail = false;
21+
22+
/* Ensure tracefs is installed */
23+
ret = stat("/sys/kernel/tracing", &buf);
24+
25+
if (ret == -1) {
26+
*message = "Tracefs is not installed";
27+
return false;
28+
}
29+
30+
/* Ensure mounted tracefs */
31+
ret = stat("/sys/kernel/tracing/README", &buf);
32+
33+
if (ret == -1 && errno == ENOENT) {
34+
if (mount(NULL, "/sys/kernel/tracing", "tracefs", 0, NULL) != 0) {
35+
*message = "Cannot mount tracefs";
36+
*fail = true;
37+
return false;
38+
}
39+
40+
ret = stat("/sys/kernel/tracing/README", &buf);
41+
}
42+
43+
if (ret == -1) {
44+
*message = "Cannot access tracefs";
45+
*fail = true;
46+
return false;
47+
}
48+
49+
return true;
50+
}
51+
52+
static inline bool user_events_enabled(char **message, bool *fail)
53+
{
54+
struct stat buf;
55+
int ret;
56+
57+
*message = "";
58+
*fail = false;
59+
60+
if (getuid() != 0) {
61+
*message = "Must be run as root";
62+
*fail = true;
63+
return false;
64+
}
65+
66+
if (!tracefs_enabled(message, fail))
67+
return false;
68+
69+
/* Ensure user_events is installed */
70+
ret = stat("/sys/kernel/tracing/user_events_data", &buf);
71+
72+
if (ret == -1) {
73+
switch (errno) {
74+
case ENOENT:
75+
*message = "user_events is not installed";
76+
return false;
77+
78+
default:
79+
*message = "Cannot access user_events_data";
80+
*fail = true;
81+
return false;
82+
}
83+
}
84+
85+
return true;
86+
}
87+
88+
#define USER_EVENT_FIXTURE_SETUP(statement) do { \
89+
char *message; \
90+
bool fail; \
91+
if (!user_events_enabled(&message, &fail)) { \
92+
if (fail) { \
93+
TH_LOG("Setup failed due to: %s", message); \
94+
ASSERT_FALSE(fail); \
95+
} \
96+
SKIP(statement, "Skipping due to: %s", message); \
97+
} \
98+
} while (0)
99+
100+
#endif /* _USER_EVENTS_SELFTESTS_H */

0 commit comments

Comments
 (0)