diff options
Diffstat (limited to 'kernel/src/mem')
| -rw-r--r-- | kernel/src/mem/paging.c | 4 | ||||
| -rw-r--r-- | kernel/src/mem/pmm.c | 9 |
2 files changed, 6 insertions, 7 deletions
diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c index cb9bd70..b8c44c0 100644 --- a/kernel/src/mem/paging.c +++ b/kernel/src/mem/paging.c @@ -14,8 +14,8 @@ uint64_t __attribute__((aligned(4096))) page_table_lvl2[512]; void map_addr(uint64_t virt, uint64_t phys, uint32_t flags) { - virt -= virt % 0x00200000; - phys -= phys % 0x00200000; + virt -= virt % PAGE_SIZE; + phys -= phys % PAGE_SIZE; // i is in range [0, 511] size_t pt_lvl4_i = (virt >> 39) % 0x200; // 512gb entry diff --git a/kernel/src/mem/pmm.c b/kernel/src/mem/pmm.c index 63bfb07..e8245f2 100644 --- a/kernel/src/mem/pmm.c +++ b/kernel/src/mem/pmm.c @@ -7,8 +7,7 @@ #include <multiboot2.h> #include <pmm.h> -#define PMM_PAGE_SIZE 4096 * 512 -#define MEM_USED_BELOW 0x03000000 +#define MEM_USED_BELOW 50*1024*1024 uint64_t free_mem_cnt; uint64_t all_mem_cnt; @@ -23,8 +22,8 @@ void init_pmm() mb2_tag_mmap_entry entry = pos->mmap_entry; if (entry.type != 1) continue; - uint64_t base = entry.base_addr & (PMM_PAGE_SIZE - 1) ? (entry.base_addr & (uint64_t)~(PMM_PAGE_SIZE - 1)) + PMM_PAGE_SIZE : entry.base_addr; - for (uint64_t i = base; i + PMM_PAGE_SIZE <= entry.base_addr + entry.length; i += PMM_PAGE_SIZE) { + uint64_t base = entry.base_addr & (PAGE_SIZE - 1) ? (entry.base_addr & (uint64_t)~(PAGE_SIZE - 1)) + PAGE_SIZE : entry.base_addr; + for (uint64_t i = base; i + PAGE_SIZE <= entry.base_addr + entry.length; i += PAGE_SIZE) { if (i >= MEM_USED_BELOW) { free_mem_cnt++; map_addr(i, i, FLAG_PRESENT); @@ -44,6 +43,6 @@ void init_pmm() void memory_usage() { - printf("memory used: %dMB\n", (48 * 1024 * 1024 + (all_mem_cnt - free_mem_cnt) * PAGE_SIZE) / 1024 / 1024); + printf("memory used: %dMB\n", (MEM_USED_BELOW + (all_mem_cnt - free_mem_cnt) * PAGE_SIZE) / 1024 / 1024); printf("memory free: %dMB\n", free_mem_cnt * PAGE_SIZE / 1024 / 1024); } |
