Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/mm/damon/tests/sysfs-kunit.h
50620 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* Data Access Monitor Unit Tests
4
*
5
* Author: SeongJae Park <[email protected]>
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
15
static 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
26
static 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
41
static 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
99
static struct kunit_case damon_sysfs_test_cases[] = {
100
KUNIT_CASE(damon_sysfs_test_add_targets),
101
{},
102
};
103
104
static struct kunit_suite damon_sysfs_test_suite = {
105
.name = "damon-sysfs",
106
.test_cases = damon_sysfs_test_cases,
107
};
108
kunit_test_suite(damon_sysfs_test_suite);
109
110
#endif /* _DAMON_SYSFS_TEST_H */
111
112
#endif /* CONFIG_DAMON_SYSFS_KUNIT_TEST */
113
114