fix page mounting contention (close #57)
[lunaix-os.git] / lunaix-os / arch / x86 / mm / vmutils.c
index df831c296ff9edb32f7f58d3caf8ecb69de10a74..8c997109ce480d8e05258ca0f80a4e72cca92b39 100644 (file)
@@ -1,5 +1,6 @@
 #include <lunaix/mm/page.h>
-#include <sys/mm/mm_defs.h>
+
+#include <asm/mm_defs.h>
 
 struct leaflet*
 dup_leaflet(struct leaflet* leaflet)
@@ -9,8 +10,9 @@ dup_leaflet(struct leaflet* leaflet)
     
     new_leaflet = alloc_leaflet(leaflet_order(leaflet));
 
-    src_va = leaflet_mount(leaflet);
+    // TODO need a proper long term fix for the contention of page mount point
     dest_va = vmap(new_leaflet, KERNEL_DATA);
+    src_va = leaflet_mount(leaflet);
 
     size_t cnt_wordsz = leaflet_size(new_leaflet) / sizeof(ptr_t);
 
@@ -36,4 +38,23 @@ dup_leaflet(struct leaflet* leaflet)
     vunmap(dest_va, new_leaflet);
 
     return new_leaflet;
-}
\ No newline at end of file
+}
+
+pte_t
+translate_vmr_prot(unsigned int vmr_prot, pte_t pte)
+{
+    pte = pte_mkuser(pte);
+
+    if ((vmr_prot & PROT_WRITE)) {
+        pte = pte_mkwritable(pte);
+    }
+
+    if ((vmr_prot & PROT_EXEC)) {
+        pte = pte_mkexec(pte);
+    }
+    else {
+        pte = pte_mknonexec(pte);
+    }
+
+    return pte;
+}