Unifying the Lunaix's Physical Memory Model (#28)
[lunaix-os.git] / lunaix-os / kernel / mm / page.c
diff --git a/lunaix-os/kernel/mm/page.c b/lunaix-os/kernel/mm/page.c
new file mode 100644 (file)
index 0000000..7bccbb3
--- /dev/null
@@ -0,0 +1,23 @@
+#include <lunaix/mm/page.h>
+
+pte_t 
+alloc_kpage_at(pte_t* ptep, pte_t pte, int order)
+{
+    ptr_t va = ptep_va(ptep, LFT_SIZE);
+
+    assert(kernel_addr(va));
+
+    struct leaflet* leaflet = alloc_leaflet_pinned(order);
+
+    if (!leaflet) {
+        return null_pte;
+    }
+
+    leaflet_wipe(leaflet);
+
+    ptep_map_leaflet(ptep, pte, leaflet);
+
+    tlb_flush_kernel_ranged(va, leaflet_nfold(leaflet));
+
+    return pte_at(ptep);
+}
\ No newline at end of file