From d78a3d8be9c194554580cb3c73c1c5ebd0d82a9b Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 3 Dec 2014 17:20:29 +0100 Subject: Improve region allocator with an idea to break dependency cycle --- kernel/include/paging.h | 2 ++ kernel/include/region.h | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/paging.h b/kernel/include/paging.h index 5766e65..7082e2e 100644 --- a/kernel/include/paging.h +++ b/kernel/include/paging.h @@ -13,6 +13,8 @@ pagedir_t *get_kernel_pagedir(); void switch_pagedir(pagedir_t *pd); +// The three functions below DO NOT DEPEND on argument pd for +// addresses above K_HIGHHALF_ADDR, so just pass 0 to map/unmap in kernel space. uint32_t pd_get_frame(pagedir_t *pd, size_t vaddr); // get physical frame for virtual address int pd_map_page(pagedir_t *pd, size_t vaddr, uint32_t frame_id, diff --git a/kernel/include/region.h b/kernel/include/region.h index 701e2d9..3c64081 100644 --- a/kernel/include/region.h +++ b/kernel/include/region.h @@ -8,8 +8,7 @@ // Region types #define REGION_T_KERNEL_BASE 0x00000001 // base kernel code & data #define REGION_T_DESCRIPTORS 0x00000002 // contains more region descriptors -#define REGION_T_PAGEDIR 0x00000010 // used to map a page directory -#define REGION_T_PAGETABLE 0x00000020 // used to map a page table +#define REGION_T_PAGETABLE 0x00000010 // used to map a page table/page directory #define REGION_T_CORE_HEAP 0x00000100 // used for the core kernel heap #define REGION_T_PROC_HEAP 0x00000200 // used for a kernel process' heap #define REGION_T_CACHE 0x00001000 // used for cache @@ -30,4 +29,9 @@ size_t region_alloc(size_t size, uint32_t type, page_fault_handler_t pf); // ret region_info_t *find_region(size_t addr); void region_free(size_t addr); +#define N_PAGES_IN_PT_REGION 4 +// special call for use by paging code +// allocates a region of N_PAGES_IN_PT_REGION pages +size_t region_alloc_for_pt(); + void dbg_print_region_stats(); -- cgit v1.2.3