From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Daniel Axtens Date: Thu, 21 Apr 2022 15:24:16 +1000 Subject: [PATCH] mm: Debug support for region operations This is handy for debugging. Enable with "set debug=regions". Signed-off-by: Daniel Axtens Reviewed-by: Daniel Kiper Tested-by: Patrick Steinhardt (cherry picked from commit 8afa5ef45b797ba5d8147ceee85ac2c59dcc7f09) --- grub-core/kern/mm.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c index 7be33e23bf..38bfb01df9 100644 --- a/grub-core/kern/mm.c +++ b/grub-core/kern/mm.c @@ -115,9 +115,8 @@ grub_mm_init_region (void *addr, grub_size_t size) grub_mm_header_t h; grub_mm_region_t r, *p, q; -#if 0 - grub_printf ("Using memory for heap: start=%p, end=%p\n", addr, addr + (unsigned int) size); -#endif + grub_dprintf ("regions", "Using memory for heap: start=%p, end=%p\n", + addr, (char *) addr + (unsigned int) size); /* Exclude last 4K to avoid overflows. */ /* If addr + 0x1000 overflows then whole region is in excluded zone. */ @@ -142,8 +141,14 @@ grub_mm_init_region (void *addr, grub_size_t size) * addr q * |----size-----|-q->pre_size-|| */ + grub_dprintf ("regions", "Can we extend into region above?" + " %p + %" PRIxGRUB_SIZE " + %" PRIxGRUB_SIZE " ?=? %p\n", + (grub_uint8_t *) addr, size, q->pre_size, (grub_uint8_t *) q); if ((grub_uint8_t *) addr + size + q->pre_size == (grub_uint8_t *) q) { + grub_dprintf ("regions", "Yes: extending a region: (%p -> %p) -> (%p -> %p)\n", + q, (grub_uint8_t *) q + sizeof (*q) + q->size, + addr, (grub_uint8_t *) q + sizeof (*q) + q->size); /* * Yes, we can merge the memory starting at addr into the * existing region from below. Align up addr to GRUB_MM_ALIGN @@ -185,9 +190,15 @@ grub_mm_init_region (void *addr, grub_size_t size) * q addr * ||-q->post_size-|----size-----| */ + grub_dprintf ("regions", "Can we extend into region below?" + " %p + %" PRIxGRUB_SIZE " + %" PRIxGRUB_SIZE " + %" PRIxGRUB_SIZE " ?=? %p\n", + (grub_uint8_t *) q, sizeof(*q), q->size, q->post_size, (grub_uint8_t *) addr); if ((grub_uint8_t *) q + sizeof (*q) + q->size + q->post_size == (grub_uint8_t *) addr) { + grub_dprintf ("regions", "Yes: extending a region: (%p -> %p) -> (%p -> %p)\n", + q, (grub_uint8_t *) q + sizeof (*q) + q->size, + q, (grub_uint8_t *) addr + size); /* * Yes! Follow a similar pattern to above, but simpler. * Our header starts at address - post_size, which should align us @@ -213,6 +224,8 @@ grub_mm_init_region (void *addr, grub_size_t size) } } + grub_dprintf ("regions", "No: considering a new region at %p of size %" PRIxGRUB_SIZE "\n", + addr, size); /* Allocate a region from the head. */ r = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) addr, GRUB_MM_ALIGN);