diff options
author | Alex Auvolat <alex.auvolat@ens.fr> | 2014-12-03 17:20:29 +0100 |
---|---|---|
committer | Alex Auvolat <alex.auvolat@ens.fr> | 2014-12-03 17:20:29 +0100 |
commit | d78a3d8be9c194554580cb3c73c1c5ebd0d82a9b (patch) | |
tree | 68f05ca7bedff54a5b7ec20bbcc33232b235a44f /kernel/include | |
parent | 6a56675851c16a0cefcf5a2d10a1227c37e9d886 (diff) | |
download | kogata-d78a3d8be9c194554580cb3c73c1c5ebd0d82a9b.tar.gz kogata-d78a3d8be9c194554580cb3c73c1c5ebd0d82a9b.zip |
Improve region allocator with an idea to break dependency cycle
Diffstat (limited to 'kernel/include')
-rw-r--r-- | kernel/include/paging.h | 2 | ||||
-rw-r--r-- | kernel/include/region.h | 8 |
2 files changed, 8 insertions, 2 deletions
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(); |