refactor: one more step towards arch-agnostic design
[lunaix-os.git] / lunaix-os / kernel / mm / cow.c
index 81e064892cb480cbdcaf8a602e4922f7485966ad..a12d6e951a5bc743b2fe1de1e555f11c5aa100a3 100644 (file)
@@ -1,11 +1,14 @@
+#include <lunaix/mm/pmm.h>
 #include <lunaix/mm/vmm.h>
 
-void*
-vmm_dup_page(pid_t pid, void* pa)
+#include <sys/mm/mempart.h>
+
+ptr_t
+vmm_dup_page(pid_t pid, ptr_t pa)
 {
-    void* new_ppg = pmm_alloc_page(pid, 0);
-    vmm_set_mapping(PD_REFERENCED, PG_MOUNT_3, new_ppg, PG_PREM_RW, VMAP_NULL);
-    vmm_set_mapping(PD_REFERENCED, PG_MOUNT_4, pa, PG_PREM_RW, VMAP_NULL);
+    ptr_t new_ppg = pmm_alloc_page(pid, 0);
+    vmm_set_mapping(VMS_SELF, PG_MOUNT_3, new_ppg, PG_PREM_RW, VMAP_NULL);
+    vmm_set_mapping(VMS_SELF, PG_MOUNT_4, pa, PG_PREM_RW, VMAP_NULL);
 
     asm volatile("movl %1, %%edi\n"
                  "movl %2, %%esi\n"
@@ -14,8 +17,8 @@ vmm_dup_page(pid_t pid, void* pa)
                  "r"(PG_MOUNT_4)
                  : "memory", "%edi", "%esi");
 
-    vmm_del_mapping(PD_REFERENCED, PG_MOUNT_3);
-    vmm_del_mapping(PD_REFERENCED, PG_MOUNT_4);
+    vmm_del_mapping(VMS_SELF, PG_MOUNT_3);
+    vmm_del_mapping(VMS_SELF, PG_MOUNT_4);
 
     return new_ppg;
 }
\ No newline at end of file