linux/tools/testing/selftests/kselftest_module.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2#ifndef __KSELFTEST_MODULE_H
   3#define __KSELFTEST_MODULE_H
   4
   5#include <linux/module.h>
   6
   7/*
   8 * Test framework for writing test modules to be loaded by kselftest.
   9 * See Documentation/dev-tools/kselftest.rst for an example test module.
  10 */
  11
  12#define KSTM_MODULE_GLOBALS()                   \
  13static unsigned int total_tests __initdata;     \
  14static unsigned int failed_tests __initdata;    \
  15static unsigned int skipped_tests __initdata
  16
  17#define KSTM_CHECK_ZERO(x) do {                                         \
  18        total_tests++;                                                  \
  19        if (x) {                                                        \
  20                pr_warn("TC failed at %s:%d\n", __func__, __LINE__);    \
  21                failed_tests++;                                         \
  22        }                                                               \
  23} while (0)
  24
  25static inline int kstm_report(unsigned int total_tests, unsigned int failed_tests,
  26                              unsigned int skipped_tests)
  27{
  28        if (failed_tests == 0) {
  29                if (skipped_tests) {
  30                        pr_info("skipped %u tests\n", skipped_tests);
  31                        pr_info("remaining %u tests passed\n", total_tests);
  32                } else
  33                        pr_info("all %u tests passed\n", total_tests);
  34        } else
  35                pr_warn("failed %u out of %u tests\n", failed_tests, total_tests);
  36
  37        return failed_tests ? -EINVAL : 0;
  38}
  39
  40#define KSTM_MODULE_LOADERS(__module)                   \
  41static int __init __module##_init(void)                 \
  42{                                                       \
  43        pr_info("loaded.\n");                           \
  44        selftest();                                     \
  45        return kstm_report(total_tests, failed_tests, skipped_tests);   \
  46}                                                       \
  47static void __exit __module##_exit(void)                \
  48{                                                       \
  49        pr_info("unloaded.\n");                         \
  50}                                                       \
  51module_init(__module##_init);                           \
  52module_exit(__module##_exit)
  53
  54#endif  /* __KSELFTEST_MODULE_H */
  55