Commit 044cd975 authored by SeongJae Park's avatar SeongJae Park Committed by Linus Torvalds
Browse files

mm/damon/vaddr-test: split a test function having >1024 bytes frame size

On some configuration[1], 'damon_test_split_evenly()' kunit test
function has >1024 bytes frame size, so below build warning is
triggered:

      CC      mm/damon/vaddr.o
    In file included from mm/damon/vaddr.c:672:
    mm/damon/vaddr-test.h: In function 'damon_test_split_evenly':
    mm/damon/vaddr-test.h:309:1: warning: the frame size of 1064 bytes is larger than 1024 bytes [-Wframe-larger-than=]
      309 | }
          | ^

This commit fixes the warning by separating the common logic in the
function.

[1] https://lore.kernel.org/linux-mm/202111182146.OV3C4uGr-lkp@intel.com/

Link: https://lkml.kernel.org/r/20211201150440.1088-6-sj@kernel.org


Fixes: 17ccae8b ("mm/damon: add kunit tests")
Signed-off-by: default avatarSeongJae Park <sj@kernel.org>
Reported-by: default avatarkernel test robot <lkp@intel.com>
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 09e12289
Loading
Loading
Loading
Loading
+40 −37
Original line number Diff line number Diff line
@@ -252,59 +252,62 @@ static void damon_test_apply_three_regions4(struct kunit *test)
			new_three_regions, expected, ARRAY_SIZE(expected));
}

static void damon_test_split_evenly(struct kunit *test)
static void damon_test_split_evenly_fail(struct kunit *test,
		unsigned long start, unsigned long end, unsigned int nr_pieces)
{
	struct damon_ctx *c = damon_new_ctx();
	struct damon_target *t;
	struct damon_region *r;
	unsigned long i;

	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(NULL, NULL, 5),
			-EINVAL);

	t = damon_new_target(42);
	r = damon_new_region(0, 100);
	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(t, r, 0), -EINVAL);
	struct damon_target *t = damon_new_target(42);
	struct damon_region *r = damon_new_region(start, end);

	damon_add_region(r, t);
	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(t, r, 10), 0);
	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 10u);
	KUNIT_EXPECT_EQ(test,
			damon_va_evenly_split_region(t, r, nr_pieces), -EINVAL);
	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1u);

	i = 0;
	damon_for_each_region(r, t) {
		KUNIT_EXPECT_EQ(test, r->ar.start, i++ * 10);
		KUNIT_EXPECT_EQ(test, r->ar.end, i * 10);
		KUNIT_EXPECT_EQ(test, r->ar.start, start);
		KUNIT_EXPECT_EQ(test, r->ar.end, end);
	}

	damon_free_target(t);
}

static void damon_test_split_evenly_succ(struct kunit *test,
	unsigned long start, unsigned long end, unsigned int nr_pieces)
{
	struct damon_target *t = damon_new_target(42);
	struct damon_region *r = damon_new_region(start, end);
	unsigned long expected_width = (end - start) / nr_pieces;
	unsigned long i = 0;

	t = damon_new_target(42);
	r = damon_new_region(5, 59);
	damon_add_region(r, t);
	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(t, r, 5), 0);
	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 5u);
	KUNIT_EXPECT_EQ(test,
			damon_va_evenly_split_region(t, r, nr_pieces), 0);
	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), nr_pieces);

	i = 0;
	damon_for_each_region(r, t) {
		if (i == 4)
		if (i == nr_pieces - 1)
			break;
		KUNIT_EXPECT_EQ(test, r->ar.start, 5 + 10 * i++);
		KUNIT_EXPECT_EQ(test, r->ar.end, 5 + 10 * i);
		KUNIT_EXPECT_EQ(test,
				r->ar.start, start + i++ * expected_width);
		KUNIT_EXPECT_EQ(test, r->ar.end, start + i * expected_width);
	}
	KUNIT_EXPECT_EQ(test, r->ar.start, 5 + 10 * i);
	KUNIT_EXPECT_EQ(test, r->ar.end, 59ul);
	KUNIT_EXPECT_EQ(test, r->ar.start, start + i * expected_width);
	KUNIT_EXPECT_EQ(test, r->ar.end, end);
	damon_free_target(t);
}

	t = damon_new_target(42);
	r = damon_new_region(5, 6);
	damon_add_region(r, t);
	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(t, r, 2), -EINVAL);
	KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1u);
static void damon_test_split_evenly(struct kunit *test)
{
	struct damon_ctx *c = damon_new_ctx();

	KUNIT_EXPECT_EQ(test, damon_va_evenly_split_region(NULL, NULL, 5),
			-EINVAL);

	damon_test_split_evenly_fail(test, 0, 100, 0);
	damon_test_split_evenly_succ(test, 0, 100, 10);
	damon_test_split_evenly_succ(test, 5, 59, 5);
	damon_test_split_evenly_fail(test, 5, 6, 2);

	damon_for_each_region(r, t) {
		KUNIT_EXPECT_EQ(test, r->ar.start, 5ul);
		KUNIT_EXPECT_EQ(test, r->ar.end, 6ul);
	}
	damon_free_target(t);
	damon_destroy_ctx(c);
}