summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2001-10-31 03:06:33 +0000
committerdillon <dillon@FreeBSD.org>2001-10-31 03:06:33 +0000
commitb11fa1d14dcd0c423c44976ff988b593de218a89 (patch)
treea1f4c581b424a7ec9997c2852806b620613051fe /sys/vm
parentde8bc4ba10fb07aa68c4cd0d79b35529c6b1b958 (diff)
downloadFreeBSD-src-b11fa1d14dcd0c423c44976ff988b593de218a89.zip
FreeBSD-src-b11fa1d14dcd0c423c44976ff988b593de218a89.tar.gz
Don't let pmap_object_init_pt() exhaust all available free pages
(allocating pv entries w/ zalloci) when called in a loop due to an madvise(). It is possible to completely exhaust the free page list and cause a system panic when an expected allocation fails.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_map.c2
-rw-r--r--sys/vm/vm_map.h1
2 files changed, 2 insertions, 1 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 9bbe14b..8dc3550 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -1339,7 +1339,7 @@ vm_map_madvise(
current->object.vm_object,
pindex,
(count << PAGE_SHIFT),
- 0
+ MAP_PREFAULT_MADVISE
);
}
}
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 3776a6e..c9831d5 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -248,6 +248,7 @@ long vmspace_resident_count(struct vmspace *vmspace);
#define MAP_PREFAULT_PARTIAL 0x0010
#define MAP_DISABLE_SYNCER 0x0020
#define MAP_DISABLE_COREDUMP 0x0100
+#define MAP_PREFAULT_MADVISE 0x0200 /* from (user) madvise request */
/*
* vm_fault option flags
OpenPOWER on IntegriCloud