mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 12:52:29 -04:00
mm/damon/tests/core-kunit: add damon_commit_target_regions() test
Add a new test for damon_commit_target_regions(). Link: https://lkml.kernel.org/r/20251111184415.141757-12-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>
This commit is contained in:
committed by
Andrew Morton
parent
299a88f6ec
commit
603f67eb91
@@ -964,6 +964,70 @@ static void damos_test_commit(struct kunit *test)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct damon_target *damon_test_help_setup_target(
|
||||||
|
unsigned long region_start_end[][2], int nr_regions)
|
||||||
|
{
|
||||||
|
struct damon_target *t;
|
||||||
|
struct damon_region *r;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
t = damon_new_target();
|
||||||
|
if (!t)
|
||||||
|
return NULL;
|
||||||
|
for (i = 0; i < nr_regions; i++) {
|
||||||
|
r = damon_new_region(region_start_end[i][0],
|
||||||
|
region_start_end[i][1]);
|
||||||
|
if (!r) {
|
||||||
|
damon_free_target(t);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
damon_add_region(r, t);
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void damon_test_commit_target_regions_for(struct kunit *test,
|
||||||
|
unsigned long dst_start_end[][2], int nr_dst_regions,
|
||||||
|
unsigned long src_start_end[][2], int nr_src_regions,
|
||||||
|
unsigned long expect_start_end[][2], int nr_expect_regions)
|
||||||
|
{
|
||||||
|
struct damon_target *dst_target, *src_target;
|
||||||
|
struct damon_region *r;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dst_target = damon_test_help_setup_target(dst_start_end, nr_dst_regions);
|
||||||
|
if (!dst_target)
|
||||||
|
kunit_skip(test, "dst target setup fail");
|
||||||
|
src_target = damon_test_help_setup_target(src_start_end, nr_src_regions);
|
||||||
|
if (!src_target) {
|
||||||
|
damon_free_target(dst_target);
|
||||||
|
kunit_skip(test, "src target setup fail");
|
||||||
|
}
|
||||||
|
damon_commit_target_regions(dst_target, src_target, 1);
|
||||||
|
i = 0;
|
||||||
|
damon_for_each_region(r, dst_target) {
|
||||||
|
KUNIT_EXPECT_EQ(test, r->ar.start, expect_start_end[i][0]);
|
||||||
|
KUNIT_EXPECT_EQ(test, r->ar.end, expect_start_end[i][1]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
KUNIT_EXPECT_EQ(test, damon_nr_regions(dst_target), nr_expect_regions);
|
||||||
|
KUNIT_EXPECT_EQ(test, i, nr_expect_regions);
|
||||||
|
damon_free_target(dst_target);
|
||||||
|
damon_free_target(src_target);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void damon_test_commit_target_regions(struct kunit *test)
|
||||||
|
{
|
||||||
|
damon_test_commit_target_regions_for(test,
|
||||||
|
(unsigned long[][2]) {{3, 8}, {8, 10}}, 2,
|
||||||
|
(unsigned long[][2]) {{4, 6}}, 1,
|
||||||
|
(unsigned long[][2]) {{4, 6}}, 1);
|
||||||
|
damon_test_commit_target_regions_for(test,
|
||||||
|
(unsigned long[][2]) {{3, 8}, {8, 10}}, 2,
|
||||||
|
(unsigned long[][2]) {}, 0,
|
||||||
|
(unsigned long[][2]) {{3, 8}, {8, 10}}, 2);
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
@@ -1170,6 +1234,7 @@ static struct kunit_case damon_test_cases[] = {
|
|||||||
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_commit),
|
||||||
|
KUNIT_CASE(damon_test_commit_target_regions),
|
||||||
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),
|
||||||
|
|||||||
Reference in New Issue
Block a user