aboutsummaryrefslogtreecommitdiff
path: root/vm/vm_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm/vm_map.c')
-rw-r--r--vm/vm_map.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/vm/vm_map.c b/vm/vm_map.c
index 7db76b7b..6c06f064 100644
--- a/vm/vm_map.c
+++ b/vm/vm_map.c
@@ -1419,13 +1419,13 @@ vm_map_entry_reset_wired(vm_map_t map, vm_map_entry_t entry)
* is downgraded to a read lock. The caller should always consider
* the map read locked on return.
*/
-static void
-vm_map_pageable_scan(struct vm_map *map,
- struct vm_map_entry *start,
- struct vm_map_entry *end)
+static void vm_map_pageable_scan(
+ vm_map_t map,
+ vm_map_entry_t start_entry,
+ vm_offset_t end)
{
- struct vm_map_entry *entry;
- boolean_t do_wire_faults;
+ vm_map_entry_t entry;
+ boolean_t do_wire_faults;
/*
* Pass 1. Update counters and prepare wiring faults.
@@ -1433,7 +1433,10 @@ vm_map_pageable_scan(struct vm_map *map,
do_wire_faults = FALSE;
- for (entry = start; entry != end; entry = entry->vme_next) {
+ for (entry = start_entry;
+ (entry != vm_map_to_entry(map)) &&
+ (entry->vme_start < end);
+ entry = entry->vme_next) {
/*
* Unwiring.
@@ -1558,7 +1561,10 @@ vm_map_pageable_scan(struct vm_map *map,
vm_map_lock_write_to_read(map);
}
- for (entry = start; entry != end; entry = entry->vme_next) {
+ for (entry = start_entry;
+ (entry != vm_map_to_entry(map)) &&
+ (entry->vme_end <= end);
+ entry = entry->vme_next) {
/*
* The wiring count can only be 1 if it was
* incremented by this function right before
@@ -1683,7 +1689,7 @@ kern_return_t vm_map_protect(
current = next;
/* Returns with the map read-locked if successful */
- vm_map_pageable_scan(map, entry, current);
+ vm_map_pageable_scan(map, entry, end);
vm_map_unlock(map);
return(KERN_SUCCESS);
@@ -1822,7 +1828,7 @@ kern_return_t vm_map_pageable(
}
/* Returns with the map read-locked */
- vm_map_pageable_scan(map, start_entry, end_entry);
+ vm_map_pageable_scan(map, start_entry, end);
if (lock_map) {
vm_map_unlock(map);