selftests: kselftest: Create ksft_print_dbg_msg()
authorAndré Almeida <andrealmeid@igalia.com>
Wed, 17 Sep 2025 21:21:40 +0000 (18:21 -0300)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 20 Sep 2025 16:11:53 +0000 (18:11 +0200)
Create ksft_print_dbg_msg() so testers can enable extra debug messages
when running a test with the flag -d.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
tools/testing/selftests/kselftest.h
tools/testing/selftests/kselftest_harness.h

index c3b6d26..8deeb4b 100644 (file)
@@ -54,6 +54,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <string.h>
 #include <stdio.h>
 #include <sys/utsname.h>
@@ -104,6 +105,7 @@ struct ksft_count {
 
 static struct ksft_count ksft_cnt;
 static unsigned int ksft_plan;
+static bool ksft_debug_enabled;
 
 static inline unsigned int ksft_test_num(void)
 {
@@ -175,6 +177,18 @@ static inline __printf(1, 2) void ksft_print_msg(const char *msg, ...)
        va_end(args);
 }
 
+static inline void ksft_print_dbg_msg(const char *msg, ...)
+{
+       va_list args;
+
+       if (!ksft_debug_enabled)
+               return;
+
+       va_start(args, msg);
+       ksft_print_msg(msg, args);
+       va_end(args);
+}
+
 static inline void ksft_perror(const char *msg)
 {
        ksft_print_msg("%s: %s (%d)\n", msg, strerror(errno), errno);
index 2925e47..ffefd27 100644 (file)
@@ -1091,7 +1091,7 @@ static int test_harness_argv_check(int argc, char **argv)
 {
        int opt;
 
-       while ((opt = getopt(argc, argv, "hlF:f:V:v:t:T:r:")) != -1) {
+       while ((opt = getopt(argc, argv, "dhlF:f:V:v:t:T:r:")) != -1) {
                switch (opt) {
                case 'f':
                case 'F':
@@ -1104,12 +1104,16 @@ static int test_harness_argv_check(int argc, char **argv)
                case 'l':
                        test_harness_list_tests();
                        return KSFT_SKIP;
+               case 'd':
+                       ksft_debug_enabled = true;
+                       break;
                case 'h':
                default:
                        fprintf(stderr,
-                               "Usage: %s [-h|-l] [-t|-T|-v|-V|-f|-F|-r name]\n"
+                               "Usage: %s [-h|-l|-d] [-t|-T|-v|-V|-f|-F|-r name]\n"
                                "\t-h       print help\n"
                                "\t-l       list all tests\n"
+                               "\t-d       enable debug prints\n"
                                "\n"
                                "\t-t name  include test\n"
                                "\t-T name  exclude test\n"
@@ -1142,8 +1146,9 @@ static bool test_enabled(int argc, char **argv,
        int opt;
 
        optind = 1;
-       while ((opt = getopt(argc, argv, "F:f:V:v:t:T:r:")) != -1) {
-               has_positive |= islower(opt);
+       while ((opt = getopt(argc, argv, "dF:f:V:v:t:T:r:")) != -1) {
+               if (opt != 'd')
+                       has_positive |= islower(opt);
 
                switch (tolower(opt)) {
                case 't':