Added API to enumerate the VM regions of a process
authorDavide Libenzi <dlibenzi@google.com>
Tue, 27 Oct 2015 22:29:10 +0000 (15:29 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 18 Nov 2015 17:54:57 +0000 (09:54 -0800)
Added API to enumerate the VM regions of a process.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/mm.h
kern/src/mm.c

index 784bb87..fd0df2c 100644 (file)
@@ -50,6 +50,9 @@ void isolate_vmrs(struct proc *p, uintptr_t va, size_t len);
 void unmap_and_destroy_vmrs(struct proc *p);
 int duplicate_vmrs(struct proc *p, struct proc *new_p);
 void print_vmrs(struct proc *p);
+void enumerate_vmrs(struct proc *p,
+                                       void (*func)(struct vm_region *vmr, void *opaque),
+                                       void *opaque);
 
 /* mmap() related functions.  These manipulate VMRs and change the hardware page
  * tables.  Any requests below the LOWEST_VA will silently be upped.  This may
index ca91e63..022f5ad 100644 (file)
@@ -359,6 +359,18 @@ void print_vmrs(struct proc *p)
                       vmr->vm_file, vmr->vm_foff);
 }
 
+void enumerate_vmrs(struct proc *p,
+                                       void (*func)(struct vm_region *vmr, void *opaque),
+                                       void *opaque)
+{
+       struct vm_region *vmr;
+
+       spin_lock(&p->vmr_lock);
+       TAILQ_FOREACH(vmr, &p->vm_regions, vm_link)
+               func(vmr, opaque);
+       spin_unlock(&p->vmr_lock);
+}
+
 /* Error values aren't quite comprehensive - check man mmap() once we do better
  * with the FS.
  *