Merge branch 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6-microblaze.git] / tools / testing / selftests / sync / sync_test.c
index 62fa666..7f79382 100644 (file)
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
+#include <errno.h>
+#include <string.h>
 
+#include "../kselftest.h"
 #include "synctest.h"
 
 static int run_test(int (*test)(void), char *name)
 {
        int result;
        pid_t childpid;
+       int ret;
 
        fflush(stdout);
        childpid = fork();
 
        if (childpid) {
                waitpid(childpid, &result, 0);
-               if (WIFEXITED(result))
-                       return WEXITSTATUS(result);
+               if (WIFEXITED(result)) {
+                       ret = WEXITSTATUS(result);
+                       if (!ret)
+                               ksft_test_result_pass("[RUN]\t%s\n", name);
+                       else
+                               ksft_test_result_fail("[RUN]\t%s\n", name);
+                       return ret;
+               }
                return 1;
        }
 
-       printf("[RUN]\tExecuting %s\n", name);
        exit(test());
 }
 
-static int sync_api_supported(void)
+static void sync_api_supported(void)
 {
        struct stat sbuf;
+       int ret;
 
-       return 0 == stat("/sys/kernel/debug/sync/sw_sync", &sbuf);
+       ret = stat("/sys/kernel/debug/sync/sw_sync", &sbuf);
+       if (!ret)
+               return;
+
+       if (errno == ENOENT)
+               ksft_exit_skip("Sync framework not supported by kernel\n");
+
+       if (errno == EACCES)
+               ksft_exit_skip("Run Sync test as root.\n");
+
+       ksft_exit_fail_msg("stat failed on /sys/kernel/debug/sync/sw_sync: %s",
+                               strerror(errno));
 }
 
 int main(void)
 {
-       int err = 0;
+       int err;
 
-       if (!sync_api_supported()) {
-               printf("SKIP: Sync framework not supported by kernel\n");
-               return 0;
-       }
+       ksft_print_header();
+
+       sync_api_supported();
 
-       printf("[RUN]\tTesting sync framework\n");
+       ksft_print_msg("[RUN]\tTesting sync framework\n");
 
-       err += RUN_TEST(test_alloc_timeline);
-       err += RUN_TEST(test_alloc_fence);
-       err += RUN_TEST(test_alloc_fence_negative);
+       RUN_TEST(test_alloc_timeline);
+       RUN_TEST(test_alloc_fence);
+       RUN_TEST(test_alloc_fence_negative);
 
-       err += RUN_TEST(test_fence_one_timeline_wait);
-       err += RUN_TEST(test_fence_one_timeline_merge);
-       err += RUN_TEST(test_fence_merge_same_fence);
-       err += RUN_TEST(test_fence_multi_timeline_wait);
-       err += RUN_TEST(test_stress_two_threads_shared_timeline);
-       err += RUN_TEST(test_consumer_stress_multi_producer_single_consumer);
-       err += RUN_TEST(test_merge_stress_random_merge);
+       RUN_TEST(test_fence_one_timeline_wait);
+       RUN_TEST(test_fence_one_timeline_merge);
+       RUN_TEST(test_fence_merge_same_fence);
+       RUN_TEST(test_fence_multi_timeline_wait);
+       RUN_TEST(test_stress_two_threads_shared_timeline);
+       RUN_TEST(test_consumer_stress_multi_producer_single_consumer);
+       RUN_TEST(test_merge_stress_random_merge);
 
+       err = ksft_get_fail_cnt();
        if (err)
-               printf("[FAIL]\tsync errors: %d\n", err);
-       else
-               printf("[OK]\tsync\n");
+               ksft_exit_fail_msg("%d out of %d sync tests failed\n",
+                                       err, ksft_test_num());
 
-       return !!err;
+       /* need this return to keep gcc happy */
+       return ksft_exit_pass();
 }