--- Net2/vm/vm_map.c 2018/04/24 18:09:15 1.1.1.3 +++ Net2/vm/vm_map.c 2018/04/24 18:14:52 1.1.1.4 @@ -33,7 +33,8 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)vm_map.c 7.3 (Berkeley) 4/21/91 + * from: @(#)vm_map.c 7.3 (Berkeley) 4/21/91 + * vm_map.c,v 1.6 1993/07/15 14:25:28 cgd Exp * * * Copyright (c) 1987, 1990 Carnegie-Mellon University. @@ -68,6 +69,7 @@ #include "param.h" #include "malloc.h" +#include "systm.h" #include "vm.h" #include "vm_page.h" #include "vm_object.h" @@ -114,6 +116,8 @@ * occurs. */ +int vm_map_delete(vm_map_t, vm_offset_t, vm_offset_t); + /* * vm_map_startup: * @@ -135,7 +139,8 @@ vm_size_t kentry_data_size; vm_map_entry_t kentry_free; vm_map_t kmap_free; -void vm_map_startup() +void +vm_map_startup() { register int i; register vm_map_entry_t mep; @@ -219,7 +224,7 @@ vm_map_t vm_map_create(pmap, min, max, p boolean_t pageable; { register vm_map_t result; - extern vm_map_t kernel_map, kmem_map; + extern vm_map_t kmem_map; if (kmem_map == NULL) { result = kmap_free; @@ -272,7 +277,7 @@ vm_map_entry_t vm_map_entry_create(map) vm_map_t map; { vm_map_entry_t entry; - extern vm_map_t kernel_map, kmem_map, mb_map, buffer_map, pager_map; + extern vm_map_t kernel_map, kmem_map, mb_map, buffer_map, pager_map; if (map == kernel_map || map == kmem_map || map == mb_map || map == buffer_map || map == pager_map) { @@ -292,7 +297,8 @@ vm_map_entry_t vm_map_entry_create(map) * * Inverse of vm_map_entry_create. */ -void vm_map_entry_dispose(map, entry) +void +vm_map_entry_dispose(map, entry) vm_map_t map; vm_map_entry_t entry; { @@ -332,7 +338,8 @@ void vm_map_entry_dispose(map, entry) * Creates another valid reference to the given map. * */ -void vm_map_reference(map) +void +vm_map_reference(map) register vm_map_t map; { if (map == NULL) @@ -350,7 +357,8 @@ void vm_map_reference(map) * destroying it if no references remain. * The map should not be locked. */ -void vm_map_deallocate(map) +void +vm_map_deallocate(map) register vm_map_t map; { register int c; @@ -389,6 +397,7 @@ void vm_map_deallocate(map) * * Requires that the map be locked, and leaves it so. */ +int vm_map_insert(map, object, offset, start, end) vm_map_t map; vm_object_t object; @@ -602,6 +611,7 @@ boolean_t vm_map_lookup_entry(map, addre * returned in the same parameter. * */ +int vm_map_find(map, object, offset, addr, length, find_space) vm_map_t map; vm_object_t object; @@ -710,7 +720,8 @@ vm_map_find(map, object, offset, addr, l * removing extra sharing maps * [XXX maybe later] merging with a neighbor */ -void vm_map_simplify_entry(map, entry) +void +vm_map_simplify_entry(map, entry) vm_map_t map; vm_map_entry_t entry; { @@ -784,7 +795,8 @@ void vm_map_simplify_entry(map, entry) * This routine is called only when it is known that * the entry must be split. */ -void _vm_map_clip_start(map, entry, start) +void +_vm_map_clip_start(map, entry, start) register vm_map_t map; register vm_map_entry_t entry; register vm_offset_t start; @@ -839,7 +851,8 @@ void _vm_map_clip_end(); * This routine is called only when it is known that * the entry must be split. */ -void _vm_map_clip_end(map, entry, end) +void +_vm_map_clip_end(map, entry, end) register vm_map_t map; register vm_map_entry_t entry; register vm_offset_t end; @@ -899,6 +912,7 @@ void _vm_map_clip_end(map, entry, end) * range from the superior map, and then destroy the * submap (if desired). [Better yet, don't try it.] */ +int vm_map_submap(map, start, end, submap) register vm_map_t map; register vm_offset_t start; @@ -942,6 +956,7 @@ vm_map_submap(map, start, end, submap) * specified, the maximum protection is to be set; * otherwise, only the current protection is affected. */ +int vm_map_protect(map, start, end, new_prot, set_max) register vm_map_t map; register vm_offset_t start; @@ -1063,6 +1078,7 @@ vm_map_protect(map, start, end, new_prot * affects how the map will be shared with * child maps at the time of vm_map_fork. */ +int vm_map_inherit(map, start, end, new_inheritance) register vm_map_t map; register vm_offset_t start; @@ -1115,6 +1131,7 @@ vm_map_inherit(map, start, end, new_inhe * The map must not be locked, but a reference * must remain to the map throughout the call. */ +int vm_map_pageable(map, start, end, new_pageable) register vm_map_t map; register vm_offset_t start; @@ -1123,8 +1140,6 @@ vm_map_pageable(map, start, end, new_pag { register vm_map_entry_t entry; vm_map_entry_t temp_entry; - register vm_offset_t failed; - int rv; vm_map_lock(map); @@ -1277,26 +1292,10 @@ vm_map_pageable(map, start, end, new_pag lock_write_to_read(&map->lock); } - rv = 0; entry = temp_entry; while (entry != &map->header && entry->start < end) { - /* - * If vm_fault_wire fails for any page we need to - * undo what has been done. We decrement the wiring - * count for those pages which have not yet been - * wired (now) and unwire those that have (later). - * - * XXX this violates the locking protocol on the map, - * needs to be fixed. - */ - if (rv) - entry->wired_count--; - else if (entry->wired_count == 1) { - rv = vm_fault_wire(map, entry->start, entry->end); - if (rv) { - failed = entry->start; - entry->wired_count--; - } + if (entry->wired_count == 1) { + vm_fault_wire(map, entry->start, entry->end); } entry = entry->next; } @@ -1307,11 +1306,6 @@ vm_map_pageable(map, start, end, new_pag else { lock_clear_recursive(&map->lock); } - if (rv) { - vm_map_unlock(map); - (void) vm_map_pageable(map, start, failed, TRUE); - return(rv); - } } vm_map_unlock(map); @@ -1327,7 +1321,8 @@ vm_map_pageable(map, start, end, new_pag * The map in question should be locked. * [This is the reason for this routine's existence.] */ -void vm_map_entry_unwire(map, entry) +void +vm_map_entry_unwire(map, entry) vm_map_t map; register vm_map_entry_t entry; { @@ -1340,7 +1335,8 @@ void vm_map_entry_unwire(map, entry) * * Deallocate the given entry from the target map. */ -void vm_map_entry_delete(map, entry) +void +vm_map_entry_delete(map, entry) register vm_map_t map; register vm_map_entry_t entry; { @@ -1367,6 +1363,7 @@ void vm_map_entry_delete(map, entry) * When called with a sharing map, removes pages from * that region from all physical maps. */ +int vm_map_delete(map, start, end) register vm_map_t map; vm_offset_t start; @@ -1462,6 +1459,7 @@ vm_map_delete(map, start, end) * Remove the given address range from the target map. * This is the exported form of vm_map_delete. */ +int vm_map_remove(map, start, end) register vm_map_t map; register vm_offset_t start; @@ -1534,7 +1532,8 @@ boolean_t vm_map_check_protection(map, s * Copies the contents of the source entry to the destination * entry. The entries *must* be aligned properly. */ -void vm_map_copy_entry(src_map, dst_map, src_entry, dst_entry) +void +vm_map_copy_entry(src_map, dst_map, src_entry, dst_entry) vm_map_t src_map, dst_map; register vm_map_entry_t src_entry, dst_entry; { @@ -1671,6 +1670,7 @@ void vm_map_copy_entry(src_map, dst_map, * map to make copies. This also reduces map * fragmentation.] */ +int vm_map_copy(dst_map, src_map, dst_addr, len, src_addr, dst_alloc, src_destroy) @@ -2351,7 +2351,8 @@ vm_map_lookup(var_map, vaddr, fault_type * (according to the handle returned by that lookup). */ -void vm_map_lookup_done(map, entry) +void +vm_map_lookup_done(map, entry) register vm_map_t map; vm_map_entry_t entry; { @@ -2381,7 +2382,8 @@ void vm_map_lookup_done(map, entry) * at allocation time because the adjacent entry * is often wired down. */ -void vm_map_simplify(map, start) +void +vm_map_simplify(map, start) vm_map_t map; vm_offset_t start; { @@ -2429,7 +2431,8 @@ void vm_map_simplify(map, start) /* * vm_map_print: [ debug ] */ -void vm_map_print(map, full) +void +vm_map_print(map, full) register vm_map_t map; boolean_t full; {