Move pkey selftest debugging helpers into shared code so both pkey
selftests can use the same tracing and abort-hook logic.

Signed-off-by: Hongfu Li <[email protected]>
---
 tools/testing/selftests/mm/pkey-helpers.h    |  4 +-
 tools/testing/selftests/mm/pkey_util.c       | 86 ++++++++++++++++++++
 tools/testing/selftests/mm/protection_keys.c | 83 -------------------
 3 files changed, 89 insertions(+), 84 deletions(-)

diff --git a/tools/testing/selftests/mm/pkey-helpers.h 
b/tools/testing/selftests/mm/pkey-helpers.h
index 2c377f4e9df1..46a8a1878dc1 100644
--- a/tools/testing/selftests/mm/pkey-helpers.h
+++ b/tools/testing/selftests/mm/pkey-helpers.h
@@ -68,7 +68,9 @@ static inline void sigsafe_printf(const char *format, ...)
 #define dprintf3(args...) dprintf_level(3, args)
 #define dprintf4(args...) dprintf_level(4, args)
 
-extern void abort_hooks(void);
+void tracing_on(void);
+void tracing_off(void);
+void abort_hooks(void);
 #define pkey_assert(condition) do {            \
        if (!(condition)) {                     \
                dprintf0("# assert() at %s::%d test_nr: %d iteration: %d\n", \
diff --git a/tools/testing/selftests/mm/pkey_util.c 
b/tools/testing/selftests/mm/pkey_util.c
index 255b332f7a08..abf708d6575e 100644
--- a/tools/testing/selftests/mm/pkey_util.c
+++ b/tools/testing/selftests/mm/pkey_util.c
@@ -2,9 +2,95 @@
 #define __SANE_USERSPACE_TYPES__
 #include <sys/syscall.h>
 #include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
 
 #include "pkey-helpers.h"
 
+#if CONTROL_TRACING > 0
+static void cat_into_file(char *str, char *file)
+{
+       int fd = open(file, O_RDWR);
+       int ret;
+
+       dprintf2("%s(): writing '%s' to '%s'\n", __func__, str, file);
+       /*
+        * these need to be raw because they are called under
+        * pkey_assert()
+        */
+       if (fd < 0) {
+               fprintf(stderr, "error opening '%s'\n", str);
+               perror("error: ");
+               exit(__LINE__);
+       }
+
+       ret = write(fd, str, strlen(str));
+       if (ret != strlen(str)) {
+               perror("write to file failed");
+               fprintf(stderr, "filename: '%s' str: '%s'\n", file, str);
+               exit(__LINE__);
+       }
+       close(fd);
+}
+
+static int warned_tracing;
+static int tracing_root_ok(void)
+{
+       if (geteuid() != 0) {
+               if (!warned_tracing)
+                       fprintf(stderr, "WARNING: not run as root, "
+                                       "can not do tracing control\n");
+               warned_tracing = 1;
+               return 0;
+       }
+       return 1;
+}
+#endif
+
+void tracing_on(void)
+{
+#if CONTROL_TRACING > 0
+#define TRACEDIR "/sys/kernel/tracing"
+       char pidstr[32];
+
+       if (!tracing_root_ok())
+               return;
+
+       sprintf(pidstr, "%d", getpid());
+       cat_into_file("0", TRACEDIR "/tracing_on");
+       cat_into_file("\n", TRACEDIR "/trace");
+       if (1) {
+               cat_into_file("function_graph", TRACEDIR "/current_tracer");
+               cat_into_file("1", TRACEDIR "/options/funcgraph-proc");
+       } else {
+               cat_into_file("nop", TRACEDIR "/current_tracer");
+       }
+       cat_into_file(pidstr, TRACEDIR "/set_ftrace_pid");
+       cat_into_file("1", TRACEDIR "/tracing_on");
+       dprintf1("enabled tracing\n");
+#endif
+}
+
+void tracing_off(void)
+{
+#if CONTROL_TRACING > 0
+       if (!tracing_root_ok())
+               return;
+       cat_into_file("0", "/sys/kernel/tracing/tracing_on");
+#endif
+}
+
+void abort_hooks(void)
+{
+       fflush(stdout);
+       fprintf(stderr, "running %s()...\n", __func__);
+       tracing_off();
+#ifdef SLEEP_ON_ABORT
+       sleep(SLEEP_ON_ABORT);
+#endif
+}
+
 int sys_pkey_alloc(unsigned long flags, unsigned long init_val)
 {
        int ret = syscall(SYS_pkey_alloc, flags, init_val);
diff --git a/tools/testing/selftests/mm/protection_keys.c 
b/tools/testing/selftests/mm/protection_keys.c
index 9a6d954ee371..e504544e2197 100644
--- a/tools/testing/selftests/mm/protection_keys.c
+++ b/tools/testing/selftests/mm/protection_keys.c
@@ -62,89 +62,6 @@ noinline int read_ptr(int *ptr)
        return *ptr;
 }
 
-#if CONTROL_TRACING > 0
-static void cat_into_file(char *str, char *file)
-{
-       int fd = open(file, O_RDWR);
-       int ret;
-
-       dprintf2("%s(): writing '%s' to '%s'\n", __func__, str, file);
-       /*
-        * these need to be raw because they are called under
-        * pkey_assert()
-        */
-       if (fd < 0) {
-               fprintf(stderr, "error opening '%s'\n", str);
-               perror("error: ");
-               exit(__LINE__);
-       }
-
-       ret = write(fd, str, strlen(str));
-       if (ret != strlen(str)) {
-               perror("write to file failed");
-               fprintf(stderr, "filename: '%s' str: '%s'\n", file, str);
-               exit(__LINE__);
-       }
-       close(fd);
-}
-
-static int warned_tracing;
-static int tracing_root_ok(void)
-{
-       if (geteuid() != 0) {
-               if (!warned_tracing)
-                       fprintf(stderr, "WARNING: not run as root, "
-                                       "can not do tracing control\n");
-               warned_tracing = 1;
-               return 0;
-       }
-       return 1;
-}
-#endif
-
-static void tracing_on(void)
-{
-#if CONTROL_TRACING > 0
-#define TRACEDIR "/sys/kernel/tracing"
-       char pidstr[32];
-
-       if (!tracing_root_ok())
-               return;
-
-       sprintf(pidstr, "%d", getpid());
-       cat_into_file("0", TRACEDIR "/tracing_on");
-       cat_into_file("\n", TRACEDIR "/trace");
-       if (1) {
-               cat_into_file("function_graph", TRACEDIR "/current_tracer");
-               cat_into_file("1", TRACEDIR "/options/funcgraph-proc");
-       } else {
-               cat_into_file("nop", TRACEDIR "/current_tracer");
-       }
-       cat_into_file(pidstr, TRACEDIR "/set_ftrace_pid");
-       cat_into_file("1", TRACEDIR "/tracing_on");
-       dprintf1("enabled tracing\n");
-#endif
-}
-
-static void tracing_off(void)
-{
-#if CONTROL_TRACING > 0
-       if (!tracing_root_ok())
-               return;
-       cat_into_file("0", "/sys/kernel/tracing/tracing_on");
-#endif
-}
-
-void abort_hooks(void)
-{
-       fflush(stdout);
-       fprintf(stderr, "running %s()...\n", __func__);
-       tracing_off();
-#ifdef SLEEP_ON_ABORT
-       sleep(SLEEP_ON_ABORT);
-#endif
-}
-
 /*
  * This attempts to have roughly a page of instructions followed by a few
  * instructions that do a write, and another page of instructions.  That
-- 
2.50.1


Reply via email to