Browse Source

feat(mm): free raw pages

greatbridf 2 years ago
parent
commit
ddb1ca3b92
2 changed files with 8 additions and 1 deletions
  1. 1 0
      include/kernel/mm.hpp
  2. 7 1
      src/kernel/mem.cpp

+ 1 - 0
include/kernel/mm.hpp

@@ -207,6 +207,7 @@ inline constexpr void* mmend(const mm* mm_area)
 // allocate n raw page(s)
 // @return the id of the first page allocated
 page_t alloc_n_raw_pages(size_t n);
+void free_n_raw_pages(page_t start_pg, size_t n);
 
 // allocate a raw page
 inline page_t alloc_raw_page(void)

+ 7 - 1
src/kernel/mem.cpp

@@ -296,7 +296,7 @@ page_t alloc_n_raw_pages(size_t n)
             first += (max + 1);
         } else {
             for (page_t i = first; i < first + n; ++i)
-                bm_set(mem_bitmap, i);
+                mark_page(i);
             return first;
         }
     }
@@ -304,6 +304,12 @@ page_t alloc_n_raw_pages(size_t n)
     return 0xffffffff;
 }
 
+void free_n_raw_pages(page_t start_pg, size_t n)
+{
+    while (n--)
+        free_page(start_pg++);
+}
+
 struct page allocate_page(void)
 {
     return page {