- region_add(dest, pos->start, pos->end, pos->attr);
+ region_release(pos);
+ }
+}
+
+void
+region_copy_mm(struct proc_mm* src, struct proc_mm* dest)
+{
+ struct mm_region *pos, *n, *dup;
+
+ llist_for_each(pos, n, &src->regions, head)
+ {
+ dup = valloc(sizeof(struct mm_region));
+ memcpy(dup, pos, sizeof(*pos));
+
+ dup->proc_vms = dest;
+
+ if (dup->mfile) {
+ vfs_ref_file(dup->mfile);
+ }
+
+ if (dup->region_copied) {
+ dup->region_copied(dup);
+ }
+
+ llist_append(&dest->regions, &dup->head);