mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 07:51:31 -04:00
mm/damon/test/core-kunit: add damon_apply_min_nr_regions() test
Add a kunit test for the functionality of damon_apply_min_nr_regions(). Link: https://lkml.kernel.org/r/20260228222831.7232-4-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
442d87c7db
commit
ca6969e074
@@ -1239,6 +1239,57 @@ static void damon_test_set_filters_default_reject(struct kunit *test)
|
||||
damos_free_filter(target_filter);
|
||||
}
|
||||
|
||||
static void damon_test_apply_min_nr_regions_for(struct kunit *test,
|
||||
unsigned long sz_regions, unsigned long min_region_sz,
|
||||
unsigned long min_nr_regions,
|
||||
unsigned long max_region_sz_expect,
|
||||
unsigned long nr_regions_expect)
|
||||
{
|
||||
struct damon_ctx *ctx;
|
||||
struct damon_target *t;
|
||||
struct damon_region *r;
|
||||
unsigned long max_region_size;
|
||||
|
||||
ctx = damon_new_ctx();
|
||||
if (!ctx)
|
||||
kunit_skip(test, "ctx alloc fail\n");
|
||||
t = damon_new_target();
|
||||
if (!t) {
|
||||
damon_destroy_ctx(ctx);
|
||||
kunit_skip(test, "target alloc fail\n");
|
||||
}
|
||||
damon_add_target(ctx, t);
|
||||
r = damon_new_region(0, sz_regions);
|
||||
if (!r) {
|
||||
damon_destroy_ctx(ctx);
|
||||
kunit_skip(test, "region alloc fail\n");
|
||||
}
|
||||
damon_add_region(r, t);
|
||||
|
||||
ctx->min_region_sz = min_region_sz;
|
||||
ctx->attrs.min_nr_regions = min_nr_regions;
|
||||
max_region_size = damon_apply_min_nr_regions(ctx);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, max_region_size, max_region_sz_expect);
|
||||
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), nr_regions_expect);
|
||||
|
||||
damon_destroy_ctx(ctx);
|
||||
}
|
||||
|
||||
static void damon_test_apply_min_nr_regions(struct kunit *test)
|
||||
{
|
||||
/* common, expected setup */
|
||||
damon_test_apply_min_nr_regions_for(test, 10, 1, 10, 1, 10);
|
||||
/* no zero size limit */
|
||||
damon_test_apply_min_nr_regions_for(test, 10, 1, 15, 1, 10);
|
||||
/* max size should be aligned by min_region_sz */
|
||||
damon_test_apply_min_nr_regions_for(test, 10, 2, 2, 6, 2);
|
||||
/*
|
||||
* when min_nr_regions and min_region_sz conflicts, min_region_sz wins.
|
||||
*/
|
||||
damon_test_apply_min_nr_regions_for(test, 10, 2, 10, 2, 5);
|
||||
}
|
||||
|
||||
static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damon_test_target),
|
||||
KUNIT_CASE(damon_test_regions),
|
||||
@@ -1265,6 +1316,7 @@ static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damos_test_filter_out),
|
||||
KUNIT_CASE(damon_test_feed_loop_next_input),
|
||||
KUNIT_CASE(damon_test_set_filters_default_reject),
|
||||
KUNIT_CASE(damon_test_apply_min_nr_regions),
|
||||
{},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user