From c679ae1bde4b6ec1b3fd04dc86f770cb06e743de Mon Sep 17 00:00:00 2001 From: pjht Date: Sat, 4 May 2019 10:52:38 -0500 Subject: [PATCH] Add find_free_pages function --- cpu/i386/paging.c | 10 +++++++--- cpu/i386/paging.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cpu/i386/paging.c b/cpu/i386/paging.c index 9a41409..0a457eb 100644 --- a/cpu/i386/paging.c +++ b/cpu/i386/paging.c @@ -43,8 +43,7 @@ void map_pages(void* virt_addr_ptr,void* phys_addr_ptr,int num_pages,char usr,ch } } -void* alloc_pages(int num_pages) { - void* phys_addr=pmem_alloc(num_pages); +uint32_t find_free_pages(int num_pages) { uint32_t bmap_index; uint32_t remaining_blks; for(uint32_t i=1;i<131072;i++) { @@ -85,7 +84,12 @@ void* alloc_pages(int num_pages) { if (remaining_blks!=0) { klog("PANIC","Out of memory"); } - void* addr=(void*)(bmap_index<<12); + return bmap_index; +} + +void* alloc_pages(int num_pages) { + void* phys_addr=pmem_alloc(num_pages); + void* addr=(void*)(find_free_pages(num_pages)<<12); map_pages(addr,phys_addr,num_pages,1,1); return addr; } diff --git a/cpu/i386/paging.h b/cpu/i386/paging.h index ab31c7d..caaad0c 100644 --- a/cpu/i386/paging.h +++ b/cpu/i386/paging.h @@ -13,4 +13,6 @@ void paging_init(); void* new_address_space(); void load_address_space(uint32_t cr3); void* virt_to_phys(void* virt_addr); +uint32_t find_free_pages(int num_pages); + #endif