Bläddra i källkod

feat(mm): make mm_list constexpr

greatbridf 2 år sedan
förälder
incheckning
0cf0b4d4c3
2 ändrade filer med 18 tillägg och 22 borttagningar
  1. 18 8
      include/kernel/mm.hpp
  2. 0 14
      src/kernel/mem.cpp

+ 18 - 8
include/kernel/mm.hpp

@@ -49,6 +49,12 @@ using page_arr = types::vector<page, types::kernel_ident_allocator>;
 page_t alloc_n_raw_pages(size_t n);
 void free_n_raw_pages(page_t start_pg, size_t n);
 
+pd_t alloc_pd(void);
+pt_t alloc_pt(void);
+
+void dealloc_pd(pd_t pd);
+void dealloc_pt(pt_t pt);
+
 // forward declaration
 namespace kernel {
 class mm_list;
@@ -107,7 +113,10 @@ public:
     pd_t m_pd;
 
 public:
-    explicit mm_list(pd_t pd);
+    explicit constexpr mm_list(pd_t pd)
+        : m_pd(pd)
+    {
+    }
     mm_list(const mm_list& v);
     constexpr mm_list(mm_list&& v)
         : m_areas(::types::move(v.m_areas))
@@ -115,7 +124,14 @@ public:
     {
         v.m_pd = nullptr;
     }
-    ~mm_list();
+    constexpr ~mm_list()
+    {
+        if (!m_pd)
+            return;
+
+        this->clear_user();
+        dealloc_pd(m_pd);
+    }
 
     constexpr iterator_type begin(void)
     {
@@ -313,9 +329,3 @@ inline page_t alloc_raw_page(void)
 
 // allocate a struct page together with the raw page
 struct page allocate_page(void);
-
-pd_t alloc_pd(void);
-pt_t alloc_pt(void);
-
-void dealloc_pd(pd_t pd);
-void dealloc_pt(pt_t pt);

+ 0 - 14
src/kernel/mem.cpp

@@ -387,11 +387,6 @@ static inline void init_mem_layout(void)
 }
 
 using kernel::mm_list;
-mm_list::mm_list(pd_t pd)
-    : m_pd(pd)
-{
-}
-
 mm_list::mm_list(const mm_list& v)
     : m_areas(v.m_areas)
 {
@@ -400,15 +395,6 @@ mm_list::mm_list(const mm_list& v)
     m_pd = pd;
 }
 
-mm_list::~mm_list()
-{
-    if (!m_pd)
-        return;
-
-    this->clear_user();
-    dealloc_pd(m_pd);
-}
-
 inline void map_raw_page_to_pte(
     pte_t* pte,
     page_t page,