Parcourir la source

fix: translate iden. mapped ptr in v_ptr_to_p_ptr

greatbridf il y a 2 ans
Parent
commit
1ae32368a5
1 fichiers modifiés avec 6 ajouts et 5 suppressions
  1. 6 5
      src/kernel/mem.c

+ 6 - 5
src/kernel/mem.c

@@ -188,9 +188,6 @@ void* p_ptr_to_v_ptr(phys_ptr_t p_ptr)
 
 phys_ptr_t l_ptr_to_p_ptr(struct mm* mm, linr_ptr_t v_ptr)
 {
-    if (mm == kernel_mm_head && v_ptr < (linr_ptr_t)KERNEL_IDENTICALLY_MAPPED_AREA_LIMIT) {
-        return (phys_ptr_t)v_ptr;
-    }
     while (mm != NULL) {
         if (v_ptr < mm->start || v_ptr >= mm->start + mm->len * 4096) {
             goto next;
@@ -208,6 +205,9 @@ phys_ptr_t l_ptr_to_p_ptr(struct mm* mm, linr_ptr_t v_ptr)
 
 phys_ptr_t v_ptr_to_p_ptr(void* v_ptr)
 {
+    if (v_ptr < KERNEL_IDENTICALLY_MAPPED_AREA_LIMIT) {
+        return (phys_ptr_t)v_ptr;
+    }
     return l_ptr_to_p_ptr(kernel_mm_head, (linr_ptr_t)v_ptr);
 }
 
@@ -259,7 +259,8 @@ page_t alloc_raw_page(void)
             return i;
         }
     }
-    return GB_FAILED;
+    MAKE_BREAK_POINT();
+    return 0xffffffff;
 }
 
 struct page* allocate_page(void)
@@ -339,7 +340,7 @@ struct page* find_page_by_l_ptr(struct mm* mm, linr_ptr_t l_ptr)
     return NULL;
 }
 
-void map_raw_page_to_pte(
+static inline void map_raw_page_to_pte(
     page_table_entry* pte,
     page_t page,
     int rw,