--- /dev/null
+#include <lunaix/mm/vmm.h>
+#include <lunaix/mm/pmm.h>
+#include <sys/mm/mm_defs.h>
+
+ptr_t
+vmm_dup_page(ptr_t pa)
+{
+ ptr_t new_ppg = pmm_alloc_page(0);
+ mount_page(PG_MOUNT_3, new_ppg);
+ mount_page(PG_MOUNT_4, pa);
+
+ asm volatile("movl %1, %%edi\n"
+ "movl %2, %%esi\n"
+ "rep movsl\n" ::"c"(1024),
+ "r"(PG_MOUNT_3),
+ "r"(PG_MOUNT_4)
+ : "memory", "%edi", "%esi");
+
+ unmount_page(PG_MOUNT_3);
+ unmount_page(PG_MOUNT_4);
+
+ return new_ppg;
+}
\ No newline at end of file