1 #include <lunaix/mm/page.h>
2 #include <sys/mm/mm_defs.h>
5 dup_leaflet(struct leaflet* leaflet)
8 struct leaflet* new_leaflet;
10 new_leaflet = alloc_leaflet(leaflet_order(leaflet));
12 src_va = leaflet_mount(leaflet);
13 dest_va = vmap(new_leaflet, KERNEL_DATA);
15 size_t cnt_wordsz = leaflet_size(new_leaflet) / sizeof(ptr_t);
17 #ifdef CONFIG_ARCH_X86_64
18 asm volatile("movq %1, %%rdi\n"
20 "rep movsq\n" ::"c"(cnt_wordsz),
23 : "memory", "%edi", "%esi");
26 asm volatile("movl %1, %%edi\n"
28 "rep movsl\n" ::"c"(cnt_wordsz),
31 : "memory", "%edi", "%esi");
35 leaflet_unmount(leaflet);
36 vunmap(dest_va, new_leaflet);