accel/qaic: Add AIC200 support
[drm/drm-misc.git] / tools / testing / selftests / user_events / user_events_selftests.h
blobe1c3c063c031cd6fb557086b6e24ec7941e76c34
1 /* SPDX-License-Identifier: GPL-2.0 */
3 #ifndef _USER_EVENTS_SELFTESTS_H
4 #define _USER_EVENTS_SELFTESTS_H
6 #include <sys/stat.h>
7 #include <sys/types.h>
8 #include <sys/mount.h>
9 #include <unistd.h>
10 #include <errno.h>
12 #include "../kselftest.h"
14 static inline void tracefs_unmount(void)
16 umount("/sys/kernel/tracing");
19 static inline bool tracefs_enabled(char **message, bool *fail, bool *umount)
21 struct stat buf;
22 int ret;
24 *message = "";
25 *fail = false;
26 *umount = false;
28 /* Ensure tracefs is installed */
29 ret = stat("/sys/kernel/tracing", &buf);
31 if (ret == -1) {
32 *message = "Tracefs is not installed";
33 return false;
36 /* Ensure mounted tracefs */
37 ret = stat("/sys/kernel/tracing/README", &buf);
39 if (ret == -1 && errno == ENOENT) {
40 if (mount(NULL, "/sys/kernel/tracing", "tracefs", 0, NULL) != 0) {
41 *message = "Cannot mount tracefs";
42 *fail = true;
43 return false;
46 *umount = true;
48 ret = stat("/sys/kernel/tracing/README", &buf);
51 if (ret == -1) {
52 *message = "Cannot access tracefs";
53 *fail = true;
54 return false;
57 return true;
60 static inline bool user_events_enabled(char **message, bool *fail, bool *umount)
62 struct stat buf;
63 int ret;
65 *message = "";
66 *fail = false;
67 *umount = false;
69 if (getuid() != 0) {
70 *message = "Must be run as root";
71 *fail = true;
72 return false;
75 if (!tracefs_enabled(message, fail, umount))
76 return false;
78 /* Ensure user_events is installed */
79 ret = stat("/sys/kernel/tracing/user_events_data", &buf);
81 if (ret == -1) {
82 switch (errno) {
83 case ENOENT:
84 *message = "user_events is not installed";
85 return false;
87 default:
88 *message = "Cannot access user_events_data";
89 *fail = true;
90 return false;
94 return true;
97 #define USER_EVENT_FIXTURE_SETUP(statement, umount) do { \
98 char *message; \
99 bool fail; \
100 if (!user_events_enabled(&message, &fail, &(umount))) { \
101 if (fail) { \
102 TH_LOG("Setup failed due to: %s", message); \
103 ASSERT_FALSE(fail); \
105 SKIP(statement, "Skipping due to: %s", message); \
107 } while (0)
109 #define USER_EVENT_FIXTURE_TEARDOWN(umount) do { \
110 if ((umount)) \
111 tracefs_unmount(); \
112 } while (0)
114 #endif /* _USER_EVENTS_SELFTESTS_H */