aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ens.fr>2014-12-06 20:30:32 +0100
committerAlex Auvolat <alex.auvolat@ens.fr>2014-12-06 20:30:32 +0100
commit0b5d6568c468075b6c1a2de065332b270345611b (patch)
treed2b9debc6eb90c5a43cac5aefd35d1550fe7b11b /kernel/include
parentb38d90b5cacee9bfc775f1fa4b31c5863654c5e8 (diff)
downloadkogata-0b5d6568c468075b6c1a2de065332b270345611b.tar.gz
kogata-0b5d6568c468075b6c1a2de065332b270345611b.zip
Refactor PF handlers and region freeing functions.
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/region.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/kernel/include/region.h b/kernel/include/region.h
index bc26bfe..4bc8917 100644
--- a/kernel/include/region.h
+++ b/kernel/include/region.h
@@ -8,9 +8,10 @@
// Region types
#define REGION_T_KERNEL_BASE 0x00000001 // base kernel code & data
#define REGION_T_DESCRIPTORS 0x00000002 // contains more region descriptors
-#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_KPROC_HEAP 0x00000200 // used for a kernel process' heap
+#define REGION_T_KPROC_STACK 0x00000400 // used for a kernel process' heap
+#define REGION_T_PROC_KSTACK 0x00000800 // used for a process' kernel heap
#define REGION_T_CACHE 0x00001000 // used for cache
#define REGION_T_HW 0x00002000 // used for hardware access
@@ -30,4 +31,16 @@ void* region_alloc(size_t size, uint32_t type, page_fault_handler_t pf); // retu
region_info_t *find_region(void* addr);
void region_free(void* addr);
+// some usefull PF handlers
+// stack_pf_handler : allocates new frames and panics on access to first page of region (stack overflow)
+void stack_pf_handler(pagedir_t *pd, struct region_info *r, void* addr);
+// default_allocator_pf_handler : just allocates new frames on page faults
+void default_allocator_pf_handler(pagedir_t *pd, struct region_info *r, void* addr);
+
+// some functions for freeing regions and frames
+// region_free_unmap_free : deletes a region and frees all frames that were mapped in it
+void region_free_unmap_free(void* addr);
+// region_free_unmap : deletes a region and unmaps all frames that were mapped in it, without freeing them
+void region_free_unmap(void* addr);
+
void dbg_print_region_stats();