mm/damon/tests/core-kunit: add damos_commit() test

Add a new unit test for damos_commit().

Link: https://lkml.kernel.org/r/20251111184415.141757-11-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Gow <davidgow@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
pull/1354/merge
SeongJae Park 2025-11-11 10:44:09 -08:00 committed by Andrew Morton
parent eec573b8dd
commit 299a88f6ec
1 changed files with 92 additions and 0 deletions

View File

@ -873,6 +873,97 @@ static void damos_test_commit_filter(struct kunit *test)
}); });
} }
static void damos_test_help_initailize_scheme(struct damos *scheme)
{
INIT_LIST_HEAD(&scheme->quota.goals);
INIT_LIST_HEAD(&scheme->filters);
INIT_LIST_HEAD(&scheme->ops_filters);
}
static void damos_test_commit_for(struct kunit *test, struct damos *dst,
struct damos *src)
{
int err;
damos_test_help_initailize_scheme(dst);
damos_test_help_initailize_scheme(src);
err = damos_commit(dst, src);
if (err)
kunit_skip(test, "damos_commit fail");
KUNIT_EXPECT_EQ(test, dst->pattern.min_sz_region,
src->pattern.min_sz_region);
KUNIT_EXPECT_EQ(test, dst->pattern.max_sz_region,
src->pattern.max_sz_region);
KUNIT_EXPECT_EQ(test, dst->pattern.min_nr_accesses,
src->pattern.min_nr_accesses);
KUNIT_EXPECT_EQ(test, dst->pattern.max_nr_accesses,
src->pattern.max_nr_accesses);
KUNIT_EXPECT_EQ(test, dst->pattern.min_age_region,
src->pattern.min_age_region);
KUNIT_EXPECT_EQ(test, dst->pattern.max_age_region,
src->pattern.max_age_region);
KUNIT_EXPECT_EQ(test, dst->action, src->action);
KUNIT_EXPECT_EQ(test, dst->apply_interval_us, src->apply_interval_us);
KUNIT_EXPECT_EQ(test, dst->wmarks.metric, src->wmarks.metric);
KUNIT_EXPECT_EQ(test, dst->wmarks.interval, src->wmarks.interval);
KUNIT_EXPECT_EQ(test, dst->wmarks.high, src->wmarks.high);
KUNIT_EXPECT_EQ(test, dst->wmarks.mid, src->wmarks.mid);
KUNIT_EXPECT_EQ(test, dst->wmarks.low, src->wmarks.low);
switch (src->action) {
case DAMOS_MIGRATE_COLD:
case DAMOS_MIGRATE_HOT:
KUNIT_EXPECT_EQ(test, dst->target_nid, src->target_nid);
break;
default:
break;
}
}
static void damos_test_commit(struct kunit *test)
{
damos_test_commit_for(test,
&(struct damos){
.pattern = (struct damos_access_pattern){
1, 2, 3, 4, 5, 6},
.action = DAMOS_PAGEOUT,
.apply_interval_us = 1000000,
.wmarks = (struct damos_watermarks){
DAMOS_WMARK_FREE_MEM_RATE,
900, 100, 50},
},
&(struct damos){
.pattern = (struct damos_access_pattern){
2, 3, 4, 5, 6, 7},
.action = DAMOS_PAGEOUT,
.apply_interval_us = 2000000,
.wmarks = (struct damos_watermarks){
DAMOS_WMARK_FREE_MEM_RATE,
800, 50, 30},
});
damos_test_commit_for(test,
&(struct damos){
.pattern = (struct damos_access_pattern){
1, 2, 3, 4, 5, 6},
.action = DAMOS_PAGEOUT,
.apply_interval_us = 1000000,
.wmarks = (struct damos_watermarks){
DAMOS_WMARK_FREE_MEM_RATE,
900, 100, 50},
},
&(struct damos){
.pattern = (struct damos_access_pattern){
2, 3, 4, 5, 6, 7},
.action = DAMOS_MIGRATE_HOT,
.apply_interval_us = 2000000,
.target_nid = 5,
});
}
static void damos_test_filter_out(struct kunit *test) static void damos_test_filter_out(struct kunit *test)
{ {
struct damon_target *t; struct damon_target *t;
@ -1078,6 +1169,7 @@ static struct kunit_case damon_test_cases[] = {
KUNIT_CASE(damos_test_commit_quota), KUNIT_CASE(damos_test_commit_quota),
KUNIT_CASE(damos_test_commit_dests), KUNIT_CASE(damos_test_commit_dests),
KUNIT_CASE(damos_test_commit_filter), KUNIT_CASE(damos_test_commit_filter),
KUNIT_CASE(damos_test_commit),
KUNIT_CASE(damos_test_filter_out), KUNIT_CASE(damos_test_filter_out),
KUNIT_CASE(damon_test_feed_loop_next_input), KUNIT_CASE(damon_test_feed_loop_next_input),
KUNIT_CASE(damon_test_set_filters_default_reject), KUNIT_CASE(damon_test_set_filters_default_reject),