Quellcode durchsuchen

feat: init_paging: check errors

greatbridf vor 2 Jahren
Ursprung
Commit
5c72b6b203
1 geänderte Dateien mit 13 neuen und 6 gelöschten Zeilen
  1. 13 6
      src/kernel/mem.c

+ 13 - 6
src/kernel/mem.c

@@ -390,22 +390,26 @@ static inline int _p_ident_n_map(
             );
 }
 
-static inline void _create_kernel_pd(void)
+static inline int _create_kernel_pd(void)
 {
     create_pd(_kernel_pd);
 
-    _p_ident_n_map(_kernel_pd,
+    int result = 0;
+
+    result |= _p_ident_n_map(_kernel_pd,
             (phys_ptr_t)KERNEL_PAGE_DIRECTORY_ADDR,
             sizeof(page_directory_entry) * 1024, 1, 1);
-    _p_ident_n_map(_kernel_pd,
+    result |= _p_ident_n_map(_kernel_pd,
             (0x00080000),
             (0xfffff - 0x80000 + 1), 1, 1);
-    _p_ident_n_map(_kernel_pd,
+    result |= _p_ident_n_map(_kernel_pd,
             KERNEL_START_ADDR,
             kernel_size, 1, 1);
-    _p_ident_n_map(_kernel_pd,
+    result |= _p_ident_n_map(_kernel_pd,
             KERNEL_EARLY_STACK_ADDR - KERNEL_EARLY_STACK_SIZE,
             KERNEL_EARLY_STACK_SIZE, 1, 1);
+    
+    return result;
 }
 
 static void init_mem_layout(void)
@@ -443,7 +447,10 @@ void init_paging(void)
 {
     init_mem_layout();
 
-    _create_kernel_pd();
+    if (_create_kernel_pd() != GB_OK) {
+        asm_cli();
+        asm_hlt();
+    }
     asm_enable_paging(_kernel_pd);
 }