summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_mmap.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1995-10-21 17:42:28 +0000
committerdyson <dyson@FreeBSD.org>1995-10-21 17:42:28 +0000
commit4519f950611c546e02812fa157fb8122f944fdf7 (patch)
tree509256e2d1d12e5f15ad0021e1b5528db6a106f1 /sys/vm/vm_mmap.c
parentbe2e2bc70b9167a3d84f086bc20acaf2baf8f7c9 (diff)
downloadFreeBSD-src-4519f950611c546e02812fa157fb8122f944fdf7.zip
FreeBSD-src-4519f950611c546e02812fa157fb8122f944fdf7.tar.gz
Implement mincore system call.
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r--sys/vm/vm_mmap.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 3beba3c..fb955fe 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -38,7 +38,7 @@
* from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
*
* @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
- * $Id: vm_mmap.c,v 1.25 1995/07/09 06:58:01 davidg Exp $
+ * $Id: vm_mmap.c,v 1.26 1995/07/13 08:48:31 davidg Exp $
*/
/*
@@ -468,9 +468,31 @@ mincore(p, uap, retval)
struct mincore_args *uap;
int *retval;
{
+ vm_offset_t addr;
+ vm_offset_t end;
+ char *vec;
- /* Not yet implemented */
- return (EOPNOTSUPP);
+ addr = trunc_page((vm_offset_t) uap->addr);
+ end = addr + round_page((vm_size_t) uap->len);
+ if (VM_MAXUSER_ADDRESS > 0 && end > VM_MAXUSER_ADDRESS)
+ return (EINVAL);
+ if (end < addr)
+ return (EINVAL);
+
+ vec = uap->vec;
+ while(addr < end) {
+ int error;
+ if (pmap_extract(&p->p_vmspace->vm_pmap, addr)) {
+ error = subyte( vec, 1);
+ } else {
+ error = subyte( vec, 0);
+ }
+ if (error)
+ return EFAULT;
+ vec++;
+ addr += PAGE_SIZE;
+ }
+ return (0);
}
struct mlock_args {
OpenPOWER on IntegriCloud