root/tools/testing/selftests/sync/sync_test.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. run_test
  2. sync_api_supported
  3. main

   1 /*
   2  *  sync test runner
   3  *  Copyright 2015-2016 Collabora Ltd.
   4  *
   5  *  Based on the implementation from the Android Open Source Project,
   6  *
   7  *  Copyright 2012 Google, Inc
   8  *
   9  *  Permission is hereby granted, free of charge, to any person obtaining a
  10  *  copy of this software and associated documentation files (the "Software"),
  11  *  to deal in the Software without restriction, including without limitation
  12  *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
  13  *  and/or sell copies of the Software, and to permit persons to whom the
  14  *  Software is furnished to do so, subject to the following conditions:
  15  *
  16  *  The above copyright notice and this permission notice shall be included in
  17  *  all copies or substantial portions of the Software.
  18  *
  19  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  22  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  23  *  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  24  *  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  25  *  OTHER DEALINGS IN THE SOFTWARE.
  26  */
  27 
  28 #include <stdio.h>
  29 #include <unistd.h>
  30 #include <stdlib.h>
  31 #include <sys/types.h>
  32 #include <sys/stat.h>
  33 #include <sys/wait.h>
  34 #include <errno.h>
  35 #include <string.h>
  36 
  37 #include "../kselftest.h"
  38 #include "synctest.h"
  39 
  40 static int run_test(int (*test)(void), char *name)
  41 {
  42         int result;
  43         pid_t childpid;
  44         int ret;
  45 
  46         fflush(stdout);
  47         childpid = fork();
  48 
  49         if (childpid) {
  50                 waitpid(childpid, &result, 0);
  51                 if (WIFEXITED(result)) {
  52                         ret = WEXITSTATUS(result);
  53                         if (!ret)
  54                                 ksft_test_result_pass("[RUN]\t%s\n", name);
  55                         else
  56                                 ksft_test_result_fail("[RUN]\t%s\n", name);
  57                         return ret;
  58                 }
  59                 return 1;
  60         }
  61 
  62         exit(test());
  63 }
  64 
  65 static void sync_api_supported(void)
  66 {
  67         struct stat sbuf;
  68         int ret;
  69 
  70         ret = stat("/sys/kernel/debug/sync/sw_sync", &sbuf);
  71         if (!ret)
  72                 return;
  73 
  74         if (errno == ENOENT)
  75                 ksft_exit_skip("Sync framework not supported by kernel\n");
  76 
  77         if (errno == EACCES)
  78                 ksft_exit_skip("Run Sync test as root.\n");
  79 
  80         ksft_exit_fail_msg("stat failed on /sys/kernel/debug/sync/sw_sync: %s",
  81                                 strerror(errno));
  82 }
  83 
  84 int main(void)
  85 {
  86         int err;
  87 
  88         ksft_print_header();
  89         ksft_set_plan(3 + 7);
  90 
  91         sync_api_supported();
  92 
  93         ksft_print_msg("[RUN]\tTesting sync framework\n");
  94 
  95         RUN_TEST(test_alloc_timeline);
  96         RUN_TEST(test_alloc_fence);
  97         RUN_TEST(test_alloc_fence_negative);
  98 
  99         RUN_TEST(test_fence_one_timeline_wait);
 100         RUN_TEST(test_fence_one_timeline_merge);
 101         RUN_TEST(test_fence_merge_same_fence);
 102         RUN_TEST(test_fence_multi_timeline_wait);
 103         RUN_TEST(test_stress_two_threads_shared_timeline);
 104         RUN_TEST(test_consumer_stress_multi_producer_single_consumer);
 105         RUN_TEST(test_merge_stress_random_merge);
 106 
 107         err = ksft_get_fail_cnt();
 108         if (err)
 109                 ksft_exit_fail_msg("%d out of %d sync tests failed\n",
 110                                         err, ksft_test_num());
 111 
 112         /* need this return to keep gcc happy */
 113         return ksft_exit_pass();
 114 }

/* [<][>][^][v][top][bottom][index][help] */