]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
memblock tests: add memblock_overlaps_region_checks
authorWei Yang <richard.weiyang@gmail.com>
Tue, 7 May 2024 07:58:30 +0000 (07:58 +0000)
committerMike Rapoport (IBM) <rppt@kernel.org>
Wed, 5 Jun 2024 07:22:22 +0000 (10:22 +0300)
Add a test case for memblock_overlaps_region().

Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Link: https://lore.kernel.org/r/20240507075833.6346-5-richard.weiyang@gmail.com
Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
tools/testing/memblock/tests/basic_api.c
tools/testing/memblock/tests/common.h

index fdac82656d150325d37019eef8209e1799c5b5ad..67503089e6a0ad9286320395dc44567128116c62 100644 (file)
@@ -2387,6 +2387,53 @@ static int memblock_trim_memory_checks(void)
        return 0;
 }
 
+static int memblock_overlaps_region_check(void)
+{
+       struct region r = {
+               .base = SZ_1G,
+               .size = SZ_4M
+       };
+
+       PREFIX_PUSH();
+
+       reset_memblock_regions();
+       memblock_add(r.base, r.size);
+
+       /* Far Away */
+       ASSERT_FALSE(memblock_overlaps_region(&memblock.memory, SZ_1M, SZ_1M));
+       ASSERT_FALSE(memblock_overlaps_region(&memblock.memory, SZ_2G, SZ_1M));
+
+       /* Neighbor */
+       ASSERT_FALSE(memblock_overlaps_region(&memblock.memory, SZ_1G - SZ_1M, SZ_1M));
+       ASSERT_FALSE(memblock_overlaps_region(&memblock.memory, SZ_1G + SZ_4M, SZ_1M));
+
+       /* Partial Overlap */
+       ASSERT_TRUE(memblock_overlaps_region(&memblock.memory, SZ_1G - SZ_1M, SZ_2M));
+       ASSERT_TRUE(memblock_overlaps_region(&memblock.memory, SZ_1G + SZ_2M, SZ_2M));
+
+       /* Totally Overlap */
+       ASSERT_TRUE(memblock_overlaps_region(&memblock.memory, SZ_1G, SZ_4M));
+       ASSERT_TRUE(memblock_overlaps_region(&memblock.memory, SZ_1G - SZ_2M, SZ_8M));
+       ASSERT_TRUE(memblock_overlaps_region(&memblock.memory, SZ_1G + SZ_1M, SZ_1M));
+
+       test_pass_pop();
+
+       return 0;
+}
+
+static int memblock_overlaps_region_checks(void)
+{
+       prefix_reset();
+       prefix_push("memblock_overlaps_region");
+       test_print("Running memblock_overlaps_region tests...\n");
+
+       memblock_overlaps_region_check();
+
+       prefix_pop();
+
+       return 0;
+}
+
 int memblock_basic_checks(void)
 {
        memblock_initialization_check();
@@ -2396,6 +2443,7 @@ int memblock_basic_checks(void)
        memblock_free_checks();
        memblock_bottom_up_checks();
        memblock_trim_memory_checks();
+       memblock_overlaps_region_checks();
 
        return 0;
 }
index 2f26405562b060a5a00dd3064f2dca5c5497ffbe..e1138e06c903111a37427da0a5572900f69913f6 100644 (file)
@@ -40,6 +40,9 @@ enum test_flags {
        assert((_expected) == (_seen)); \
 } while (0)
 
+#define ASSERT_TRUE(_seen) ASSERT_EQ(true, _seen)
+#define ASSERT_FALSE(_seen) ASSERT_EQ(false, _seen)
+
 /**
  * ASSERT_NE():
  * Check the condition