diff options
author | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2024-01-09 21:40:46 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2024-01-09 21:40:46 +0100 |
commit | d8d31c16138a4d6dc1ff3d33b3172c151c221767 (patch) | |
tree | a8da8a4088e8a3b0ff2766024f76aaf581e10e0d /stage3/main.c | |
parent | c6e1454fbb872aed5d445d458958943556271529 (diff) | |
download | cuddles-d8d31c16138a4d6dc1ff3d33b3172c151c221767.tar.xz |
properly remove the 1M-2M area from mmap
Diffstat (limited to 'stage3/main.c')
-rw-r--r-- | stage3/main.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/stage3/main.c b/stage3/main.c index 9d2c43f..5f6756f 100644 --- a/stage3/main.c +++ b/stage3/main.c @@ -64,9 +64,15 @@ void kmain() #define MMAP for (MemRegion *mreg = (void *) 0x500; mreg->start != nil; mreg++) MMAP { - if (mreg->start == (void *) 0x100000) { - mreg->start = (void *) 0x200000; - mreg->size -= 0x100000; + // remove anything between 0x100000 and 0x200000. it has already been mapped + usize start = (usize) mreg->start; + if (start >= 0x100000 && start < 0x200000) { + if (start + mreg->size <= 0x200000) { + mreg->size = 0; // kill it + } else { + mreg->size = start + mreg->size - 0x200000; + mreg->start = (void *) 0x200000; + } } } |