/* SPDX-License-Identifier: GPL-2.0+ */
#ifndef __KSELFTEST_MODULE_H
#define __KSELFTEST_MODULE_H

#include <linux/module.h>
#include <linux/panic.h>

/*
 * Test framework for writing test modules to be loaded by kselftest.
 * See Documentation/dev-tools/kselftest.rst for an example test module.
 */

#define KSTM_MODULE_GLOBALS()			\
static unsigned int total_tests __initdata;	\
static unsigned int failed_tests __initdata;	\
static unsigned int skipped_tests __initdata

#define KSTM_CHECK_ZERO(x) do {						\
	total_tests++;							\
	if (x) {							\
		pr_warn("TC failed at %s:%d\n", __func__, __LINE__);	\
		failed_tests++;						\
	}								\
} while (0)

static inline int kstm_report(unsigned int total_tests, unsigned int failed_tests,
			      unsigned int skipped_tests)
{
	if (failed_tests == 0) {
		if (skipped_tests) {
			pr_info("skipped %u tests\n", skipped_tests);
			pr_info("remaining %u tests passed\n", total_tests);
		} else
			pr_info("all %u tests passed\n", total_tests);
	} else
		pr_warn("failed %u out of %u tests\n", failed_tests, total_tests);

	return failed_tests ? -EINVAL : 0;
}

#define KSTM_MODULE_LOADERS(__module)			\
static int __init __module##_init(void)			\
{							\
	pr_info("loaded.\n");				\
	add_taint(TAINT_TEST, LOCKDEP_STILL_OK);	\
	selftest();					\
	return kstm_report(total_tests, failed_tests, skipped_tests);	\
}							\
static void __exit __module##_exit(void)		\
{							\
	pr_info("unloaded.\n");				\
}							\
module_init(__module##_init);				\
module_exit(__module##_exit)

MODULE_INFO(test, "Y");

#endif	/* __KSELFTEST_MODULE_H */
