From 304eb9cecb7c2eaf101ec2b8e3ea183a4fa53a01 Mon Sep 17 00:00:00 2001 From: nimlgen <138685161+nimlgen@users.noreply.github.com> Date: Wed, 23 Jul 2025 11:11:26 +0300 Subject: [PATCH] allocate less memory in am tests (#11342) --- test/external/external_test_am.py | 55 +++++++++++++++---------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/test/external/external_test_am.py b/test/external/external_test_am.py index ca4da691c5..28aca7780e 100644 --- a/test/external/external_test_am.py +++ b/test/external/external_test_am.py @@ -21,12 +21,12 @@ class FakeAM: def __init__(self): self.is_booting, self.smi_dev = True, False self.pcidev = FakePCIDev() - self.vram_size = (4 << 30) + self.vram_size = (512 << 20) self.vram_mv = memoryview(bytearray(self.vram_size)) self.vram = MMIOInterface(mv_address(self.vram_mv), self.vram_mv.nbytes) self.gmc = FakeGMC(self) self.mm = AMMemoryManager(self, self.vram_size, boot_size=(32 << 20), pt_t=AMPageTableEntry, va_shifts=[12, 21, 30, 39], va_bits=48, - first_lv=am.AMDGPU_VM_PDB1, va_base=AMMemoryManager.va_allocator.base, + first_lv=am.AMDGPU_VM_PDB2, va_base=AMMemoryManager.va_allocator.base, palloc_ranges=[(1 << (i + 12), 0x1000) for i in range(9 * (3 - am.AMDGPU_VM_PDB2), -1, -1)]) self.is_booting = False self.ip_ver = {am.GC_HWIP: (11, 0, 0)} @@ -56,6 +56,8 @@ def helper_read_entry_components(entry_val): "read": (entry_val >> 5) & 0x1, "write": (entry_val >> 6) & 0x1, "exec": (entry_val >> 4) & 0x1, "mtype": (entry_val >> 48) & 0x7, "T": (entry_val >> 51) & 0x1, "L": (entry_val >> 55) & 0x1, "F": (entry_val >> 56) & 0x1} +def helper_va(va:int): return va + AMMemoryManager.va_allocator.base + class TestAMPageTable(unittest.TestCase): @classmethod def setUpClass(cls): @@ -66,10 +68,9 @@ class TestAMPageTable(unittest.TestCase): for va,sz in [(0x10000, 0x3000), (0x11000, 0x300000), (0x10000, 0x2000), (0x11000, 0x5000), (0x2000000, 0x2000), (0x4000000, 0x4000000), (0x38000, 0x303000), (0x8000, 0x1000)]: - exteranl_va = va + AMMemoryManager.va_allocator.base - mm.map_range(vaddr=exteranl_va, size=sz, paddrs=[(va, sz)]) + mm.map_range(vaddr=helper_va(va), size=sz, paddrs=[(va, sz)]) - ctx = PageTableTraverseContext(self.d[0], mm.root_page_table, exteranl_va) + ctx = PageTableTraverseContext(self.d[0], mm.root_page_table, helper_va(va)) results = list(ctx.next(sz)) total_covered = 0 @@ -86,7 +87,7 @@ class TestAMPageTable(unittest.TestCase): assert pte['paddr'] == va + _offset + i * _pte_covers, f"Expected paddr {pte['paddr']:#x} to be {va + _offset + i * _pte_covers:#x}" assert pte['valid'] == 1 - mm.unmap_range(va, sz) + mm.unmap_range(helper_va(va), sz) for tup in results: _offset, _pt, _pte_idx, _n_ptes, _pte_covers = tup @@ -99,18 +100,16 @@ class TestAMPageTable(unittest.TestCase): mm0 = self.d[0].mm for (va1,sz1),(va2,sz2) in [((0x10000, (0x1000)), (0x11000, (2 << 20)))]: - exteranl_va1 = va1 + AMMemoryManager.va_allocator.base - exteranl_va2 = va2 + AMMemoryManager.va_allocator.base - mm0.map_range(vaddr=exteranl_va1, size=sz1, paddrs=[(va1, sz1)]) - mm0.map_range(vaddr=exteranl_va2, size=sz2, paddrs=[(va2, sz2)]) - mm0.unmap_range(va2, sz2) - mm0.unmap_range(va1, sz1) + mm0.map_range(vaddr=helper_va(va1), size=sz1, paddrs=[(va1, sz1)]) + mm0.map_range(vaddr=helper_va(va2), size=sz2, paddrs=[(va2, sz2)]) + mm0.unmap_range(helper_va(va2), sz2) + mm0.unmap_range(helper_va(va1), sz1) def test_double_map(self): mm0 = self.d[0].mm for va,sz in [(0x10000, 0x3000), (0x1000000, 0x1000000), (0x12000, 0x4000)]: - exteranl_va = va + AMMemoryManager.va_allocator.base + exteranl_va = helper_va(va) mm0.map_range(vaddr=exteranl_va, size=sz, paddrs=[(va, sz)]) with self.assertRaises(AssertionError): @@ -144,36 +143,36 @@ class TestAMPageTable(unittest.TestCase): mm0 = self.d[0].mm with self.assertRaises(AssertionError): - mm0.unmap_range(0x10000, 0x3000) + mm0.unmap_range(helper_va(0x10000), 0x3000) - mm0.map_range(0x10000, 0x3000, paddrs=[(0x10000, 0x3000)]) - mm0.unmap_range(0x10000, 0x3000) + mm0.map_range(helper_va(0x10000), 0x3000, paddrs=[(0x10000, 0x3000)]) + mm0.unmap_range(helper_va(0x10000), 0x3000) with self.assertRaises(AssertionError): - mm0.unmap_range(0x10000, 0x3000) + mm0.unmap_range(helper_va(0x10000), 0x3000) - mm0.map_range(0x10000, 0x3000, paddrs=[(0x10000, 0x3000)]) - mm0.unmap_range(0x10000, 0x3000) + mm0.map_range(helper_va(0x10000), 0x3000, paddrs=[(0x10000, 0x3000)]) + mm0.unmap_range(helper_va(0x10000), 0x3000) with self.assertRaises(AssertionError): - mm0.unmap_range(0x10000, 0x3000) + mm0.unmap_range(helper_va(0x10000), 0x3000) def test_free_pt(self): mm0 = self.d[0].mm # offset from start for off in [0, 0x3000, 0x10000]: - mm0.map_range(0x1000000 + off, (2 << 20) - off, paddrs=[(0x10000, 0x1000)] * (512 - off // 0x1000)) - mm0.unmap_range(0x1000000 + off, (2 << 20) - off) - mm0.map_range(0x1000000, 2 << 20, paddrs=[(0x10000, 2 << 20)]) - mm0.unmap_range(0x1000000, 2 << 20) + mm0.map_range(helper_va(0x1000000) + off, (2 << 20) - off, paddrs=[(0x10000, 0x1000)] * (512 - off // 0x1000)) + mm0.unmap_range(helper_va(0x1000000) + off, (2 << 20) - off) + mm0.map_range(helper_va(0x1000000), 2 << 20, paddrs=[(0x10000, 2 << 20)]) + mm0.unmap_range(helper_va(0x1000000), 2 << 20) # offset from end for off in [0x1000, 0x20000]: - mm0.map_range(0x1000000, (2 << 20) - off, paddrs=[(0x10000, 0x1000)] * (512 - off // 0x1000)) - mm0.unmap_range(0x1000000, (2 << 20) - off) - mm0.map_range(0x1000000, 2 << 20, paddrs=[(0x10000, 2 << 20)]) - mm0.unmap_range(0x1000000, 2 << 20) + mm0.map_range(helper_va(0x1000000), (2 << 20) - off, paddrs=[(0x10000, 0x1000)] * (512 - off // 0x1000)) + mm0.unmap_range(helper_va(0x1000000), (2 << 20) - off) + mm0.map_range(helper_va(0x1000000), 2 << 20, paddrs=[(0x10000, 2 << 20)]) + mm0.unmap_range(helper_va(0x1000000), 2 << 20) def test_frag_size(self): mm0 = self.d[0].mm