]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: lmb: add test for overflow protection in lmb_add_region
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Wed, 10 Mar 2021 09:16:30 +0000 (10:16 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 22 Apr 2021 18:09:45 +0000 (14:09 -0400)
Add test for max number of memory regions and in reserved regions.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
test/lib/lmb.c

index 644ee78758513b7a89438d15d805e4324fe7d185..0d8963fcbf3707e33e0ebc4ff125d51116f7f62e 100644 (file)
@@ -659,3 +659,67 @@ static int lib_test_lmb_get_free_size(struct unit_test_state *uts)
 
 DM_TEST(lib_test_lmb_get_free_size,
        UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+static int lib_test_lmb_max_regions(struct unit_test_state *uts)
+{
+       const phys_addr_t ram = 0x00000000;
+       const phys_size_t ram_size = 0x8000000;
+       const phys_size_t blk_size = 0x10000;
+       phys_addr_t offset;
+       struct lmb lmb;
+       int ret, i;
+
+       lmb_init(&lmb);
+
+       ut_asserteq(lmb.memory.cnt, 0);
+       ut_asserteq(lmb.memory.max, 8);
+       ut_asserteq(lmb.reserved.cnt, 0);
+       ut_asserteq(lmb.reserved.max, 8);
+
+       /*  Add 8 memory regions */
+       for (i = 0; i < 8; i++) {
+               offset = ram + 2 * i * ram_size;
+               ret = lmb_add(&lmb, offset, ram_size);
+               ut_asserteq(ret, 0);
+       }
+       ut_asserteq(lmb.memory.cnt, 8);
+       ut_asserteq(lmb.reserved.cnt, 0);
+
+       /*  error for the 9th memory regions */
+       offset = ram + 2 * 8 * ram_size;
+       ret = lmb_add(&lmb, offset, ram_size);
+       ut_asserteq(ret, -1);
+
+       ut_asserteq(lmb.memory.cnt, 8);
+       ut_asserteq(lmb.reserved.cnt, 0);
+
+       /*  reserve 8 regions */
+       for (i = 0; i < 8; i++) {
+               offset = ram + 2 * i * blk_size;
+               ret = lmb_reserve(&lmb, offset, blk_size);
+               ut_asserteq(ret, 0);
+       }
+
+       ut_asserteq(lmb.memory.cnt, 8);
+       ut_asserteq(lmb.reserved.cnt, 8);
+
+       /*  error for the 9th reserved blocks */
+       offset = ram + 2 * 8 * blk_size;
+       ret = lmb_reserve(&lmb, offset, blk_size);
+       ut_asserteq(ret, -1);
+
+       ut_asserteq(lmb.memory.cnt, 8);
+       ut_asserteq(lmb.reserved.cnt, 8);
+
+       /*  check each regions */
+       for (i = 0; i < 8; i++)
+               ut_asserteq(lmb.memory.region[i].base, ram + 2 * i * ram_size);
+
+       for (i = 0; i < 8; i++)
+               ut_asserteq(lmb.reserved.region[i].base, ram + 2 * i * blk_size);
+
+       return 0;
+}
+
+DM_TEST(lib_test_lmb_max_regions,
+       UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);