From 855440f584d2591435189816f808b0ee563288e3 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 21 Feb 2026 11:22:51 +0000 Subject: [PATCH] vm: add trace output --- vm/memblock.c | 36 +++++++++++++++++++++++++++++++----- vm/vm-object.c | 4 ++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/vm/memblock.c b/vm/memblock.c index 86f0263..ca33dd9 100644 --- a/vm/memblock.c +++ b/vm/memblock.c @@ -19,10 +19,11 @@ contributors may be used to endorse or promote products derived from this software without specific prior written permission. */ -#include #include #include +#include #include +#include #include #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -447,10 +448,10 @@ void __next_memory_region( } /* we want the area that is overlapped by both - region M (m_start - m_end) : The region defined - as system memory. region R (r_start - r_end) : The - region defined as free / outside of any reserved - regions. + - region M (m_start - m_end) : The region defined + as system memory. + - region R (r_start - r_end) : The region defined as + free / outside of any reserved regions. */ it->it_base = MAX(m_start, r_start); it->it_limit = MIN(m_end, r_end); @@ -497,3 +498,28 @@ void *memblock_phys_to_virt(phys_addr_t p) { return (void *)(p + memblock.m_voffset); } + +#ifdef TRACE +static void memblock_type_dump(struct memblock_type *type) +{ + tracek("%s:", type->name); + for (size_t i = 0; i < type->count; i++) { + tracek(" [%zx-%zx]", + type->regions[i].base, + type->regions[i].limit); + } +} + +extern void memblock_dump(void) +{ + memblock_type_dump(&memblock.memory); + memblock_type_dump(&memblock.reserved); + + tracek("free:"); + struct memblock_iter it; + for_each_free_mem_range(&it, 0, ADDR_MAX) + { + tracek(" [%zx-%zx]", it.it_base, it.it_limit); + } +} +#endif diff --git a/vm/vm-object.c b/vm/vm-object.c index c7e3c31..f703dc4 100644 --- a/vm/vm-object.c +++ b/vm/vm-object.c @@ -286,6 +286,10 @@ extern struct vm_page *vm_object_alloc_page( return NULL; } + tracek("vm-object: [%s] alloc offset %zx -> page %zx", + vo->vo_name, + offset, + vm_page_get_paddr(page)); page->p_vmo_offset = offset; vo->vo_pages.b_root = &page->p_bnode; btree_insert_fixup(&vo->vo_pages, &page->p_bnode);