mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
mm/damon/core-test: add a unit test for __damos_filter_out()
Implement a kunit test for the core of address range DAMOS filter handling, namely __damos_filter_out(). The test especially focus on regions that overlap with given filter's target address range. Link: https://lkml.kernel.org/r/20230802214312.110532-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Brendan Higgins <brendanhiggins@google.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
2f1abcfccd
commit
26713c8908
@ -353,6 +353,66 @@ static void damos_test_new_filter(struct kunit *test)
|
||||
damos_destroy_filter(filter);
|
||||
}
|
||||
|
||||
static void damos_test_filter_out(struct kunit *test)
|
||||
{
|
||||
struct damon_target *t;
|
||||
struct damon_region *r, *r2;
|
||||
struct damos_filter *f;
|
||||
|
||||
f = damos_new_filter(DAMOS_FILTER_TYPE_ADDR, true);
|
||||
f->addr_range = (struct damon_addr_range){
|
||||
.start = DAMON_MIN_REGION * 2, .end = DAMON_MIN_REGION * 6};
|
||||
|
||||
t = damon_new_target();
|
||||
r = damon_new_region(DAMON_MIN_REGION * 3, DAMON_MIN_REGION * 5);
|
||||
damon_add_region(r, t);
|
||||
|
||||
/* region in the range */
|
||||
KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
|
||||
|
||||
/* region before the range */
|
||||
r->ar.start = DAMON_MIN_REGION * 1;
|
||||
r->ar.end = DAMON_MIN_REGION * 2;
|
||||
KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
|
||||
|
||||
/* region after the range */
|
||||
r->ar.start = DAMON_MIN_REGION * 6;
|
||||
r->ar.end = DAMON_MIN_REGION * 8;
|
||||
KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
|
||||
|
||||
/* region started before the range */
|
||||
r->ar.start = DAMON_MIN_REGION * 1;
|
||||
r->ar.end = DAMON_MIN_REGION * 4;
|
||||
KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
|
||||
/* filter should have split the region */
|
||||
KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1);
|
||||
KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 2);
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 2);
|
||||
r2 = damon_next_region(r);
|
||||
KUNIT_EXPECT_EQ(test, r2->ar.start, DAMON_MIN_REGION * 2);
|
||||
KUNIT_EXPECT_EQ(test, r2->ar.end, DAMON_MIN_REGION * 4);
|
||||
damon_destroy_region(r2, t);
|
||||
|
||||
/* region started in the range */
|
||||
r->ar.start = DAMON_MIN_REGION * 2;
|
||||
r->ar.end = DAMON_MIN_REGION * 8;
|
||||
KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
|
||||
/* filter should have split the region */
|
||||
KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2);
|
||||
KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6);
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 2);
|
||||
r2 = damon_next_region(r);
|
||||
KUNIT_EXPECT_EQ(test, r2->ar.start, DAMON_MIN_REGION * 6);
|
||||
KUNIT_EXPECT_EQ(test, r2->ar.end, DAMON_MIN_REGION * 8);
|
||||
damon_destroy_region(r2, t);
|
||||
|
||||
damon_free_target(t);
|
||||
damos_free_filter(f);
|
||||
}
|
||||
|
||||
static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damon_test_target),
|
||||
KUNIT_CASE(damon_test_regions),
|
||||
@ -366,6 +426,7 @@ static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damon_test_update_monitoring_result),
|
||||
KUNIT_CASE(damon_test_set_attrs),
|
||||
KUNIT_CASE(damos_test_new_filter),
|
||||
KUNIT_CASE(damos_test_filter_out),
|
||||
{},
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user