File Index
Files and directories
Sign in
FILE

sysfs-kunit.h

File preview with syntax highlighting.

linux-6.19.14/mm/damon/tests/sysfs-kunit.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Data Access Monitor Unit Tests
  4 *
  5 * Author: SeongJae Park <sj@kernel.org>
  6 */
  7
  8#ifdef CONFIG_DAMON_SYSFS_KUNIT_TEST
  9
 10#ifndef _DAMON_SYSFS_TEST_H
 11#define _DAMON_SYSFS_TEST_H
 12
 13#include <kunit/test.h>
 14
 15static unsigned int nr_damon_targets(struct damon_ctx *ctx)
 16{
 17	struct damon_target *t;
 18	unsigned int nr_targets = 0;
 19
 20	damon_for_each_target(t, ctx)
 21		nr_targets++;
 22
 23	return nr_targets;
 24}
 25
 26static int __damon_sysfs_test_get_any_pid(int min, int max)
 27{
 28	struct pid *pid;
 29	int i;
 30
 31	for (i = min; i <= max; i++) {
 32		pid = find_get_pid(i);
 33		if (pid) {
 34			put_pid(pid);
 35			return i;
 36		}
 37	}
 38	return -1;
 39}
 40
 41static void damon_sysfs_test_add_targets(struct kunit *test)
 42{
 43	struct damon_sysfs_targets *sysfs_targets;
 44	struct damon_sysfs_target *sysfs_target;
 45	struct damon_ctx *ctx;
 46
 47	sysfs_targets = damon_sysfs_targets_alloc();
 48	if (!sysfs_targets)
 49		kunit_skip(test, "sysfs_targets alloc fail");
 50	sysfs_targets->nr = 1;
 51	sysfs_targets->targets_arr = kmalloc_array(1,
 52			sizeof(*sysfs_targets->targets_arr), GFP_KERNEL);
 53	if (!sysfs_targets->targets_arr) {
 54		kfree(sysfs_targets);
 55		kunit_skip(test, "targets_arr alloc fail");
 56	}
 57
 58	sysfs_target = damon_sysfs_target_alloc();
 59	if (!sysfs_target) {
 60		kfree(sysfs_targets->targets_arr);
 61		kfree(sysfs_targets);
 62		kunit_skip(test, "sysfs_target alloc fail");
 63	}
 64	sysfs_target->pid = __damon_sysfs_test_get_any_pid(12, 100);
 65	sysfs_target->regions = damon_sysfs_regions_alloc();
 66	if (!sysfs_target->regions) {
 67		kfree(sysfs_targets->targets_arr);
 68		kfree(sysfs_targets);
 69		kfree(sysfs_target);
 70		kunit_skip(test, "sysfs_regions alloc fail");
 71	}
 72
 73	sysfs_targets->targets_arr[0] = sysfs_target;
 74
 75	ctx = damon_new_ctx();
 76	if (!ctx) {
 77		kfree(sysfs_targets->targets_arr);
 78		kfree(sysfs_targets);
 79		kfree(sysfs_target->regions);
 80		kfree(sysfs_target);
 81		kunit_skip(test, "ctx alloc fail");
 82	}
 83
 84	damon_sysfs_add_targets(ctx, sysfs_targets);
 85	KUNIT_EXPECT_EQ(test, 1u, nr_damon_targets(ctx));
 86
 87	sysfs_target->pid = __damon_sysfs_test_get_any_pid(
 88			sysfs_target->pid + 1, 200);
 89	damon_sysfs_add_targets(ctx, sysfs_targets);
 90	KUNIT_EXPECT_EQ(test, 2u, nr_damon_targets(ctx));
 91
 92	damon_destroy_ctx(ctx);
 93	kfree(sysfs_targets->targets_arr);
 94	kfree(sysfs_targets);
 95	kfree(sysfs_target->regions);
 96	kfree(sysfs_target);
 97}
 98
 99static struct kunit_case damon_sysfs_test_cases[] = {
100	KUNIT_CASE(damon_sysfs_test_add_targets),
101	{},
102};
103
104static struct kunit_suite damon_sysfs_test_suite = {
105	.name = "damon-sysfs",
106	.test_cases = damon_sysfs_test_cases,
107};
108kunit_test_suite(damon_sysfs_test_suite);
109
110#endif /* _DAMON_SYSFS_TEST_H */
111
112#endif /* CONFIG_DAMON_SYSFS_KUNIT_TEST */
~/ Read-only file preview.