1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * The Mach Operating System project at Carnegie-Mellon University. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 4. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 * @(#)vm_map.h 8.9 (Berkeley) 5/17/95 33 * 34 * 35 * Copyright (c) 1987, 1990 Carnegie-Mellon University. 36 * All rights reserved. 37 * 38 * Authors: Avadis Tevanian, Jr., Michael Wayne Young 39 * 40 * Permission to use, copy, modify and distribute this software and 41 * its documentation is hereby granted, provided that both the copyright 42 * notice and this permission notice appear in all copies of the 43 * software, derivative works or modified versions, and any portions 44 * thereof, and that both notices appear in supporting documentation. 45 * 46 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 47 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 48 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 49 * 50 * Carnegie Mellon requests users of this software to return to 51 * 52 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 53 * School of Computer Science 54 * Carnegie Mellon University 55 * Pittsburgh PA 15213-3890 56 * 57 * any improvements or extensions that they make and grant Carnegie the 58 * rights to redistribute these changes. 59 *
|
245 int vm_refcnt; /* number of references */ 246}; 247 248#ifdef _KERNEL 249static __inline pmap_t 250vmspace_pmap(struct vmspace *vmspace) 251{ 252 return &vmspace->vm_pmap; 253} 254#endif /* _KERNEL */ 255 256#ifdef _KERNEL 257/* 258 * Macros: vm_map_lock, etc. 259 * Function: 260 * Perform locking on the data portion of a map. Note that 261 * these macros mimic procedure calls returning void. The 262 * semicolon is supplied by the user of these macros, not 263 * by the macros themselves. The macros can safely be used 264 * as unbraced elements in a higher level statement. 265 */ 266 267void _vm_map_lock(vm_map_t map, const char *file, int line); 268void _vm_map_unlock(vm_map_t map, const char *file, int line); 269void _vm_map_lock_read(vm_map_t map, const char *file, int line); 270void _vm_map_unlock_read(vm_map_t map, const char *file, int line); 271int _vm_map_trylock(vm_map_t map, const char *file, int line); 272int _vm_map_trylock_read(vm_map_t map, const char *file, int line); 273int _vm_map_lock_upgrade(vm_map_t map, const char *file, int line); 274void _vm_map_lock_downgrade(vm_map_t map, const char *file, int line); 275int vm_map_unlock_and_wait(vm_map_t map, boolean_t user_wait); 276void vm_map_wakeup(vm_map_t map); 277 278#define vm_map_lock(map) _vm_map_lock(map, LOCK_FILE, LOCK_LINE) 279#define vm_map_unlock(map) _vm_map_unlock(map, LOCK_FILE, LOCK_LINE) 280#define vm_map_lock_read(map) _vm_map_lock_read(map, LOCK_FILE, LOCK_LINE) 281#define vm_map_unlock_read(map) _vm_map_unlock_read(map, LOCK_FILE, LOCK_LINE) 282#define vm_map_trylock(map) _vm_map_trylock(map, LOCK_FILE, LOCK_LINE) 283#define vm_map_trylock_read(map) \ 284 _vm_map_trylock_read(map, LOCK_FILE, LOCK_LINE) 285#define vm_map_lock_upgrade(map) \ 286 _vm_map_lock_upgrade(map, LOCK_FILE, LOCK_LINE) 287#define vm_map_lock_downgrade(map) \ 288 _vm_map_lock_downgrade(map, LOCK_FILE, LOCK_LINE) 289 290long vmspace_resident_count(struct vmspace *vmspace); 291long vmspace_wired_count(struct vmspace *vmspace); 292#endif /* _KERNEL */ 293 294 295/* XXX: number of kernel maps and entries to statically allocate */ 296#define MAX_KMAP 10 297#define MAX_KMAPENT 128 298 299/* 300 * Copy-on-write flags for vm_map operations 301 */ 302#define MAP_UNUSED_01 0x0001 303#define MAP_COPY_ON_WRITE 0x0002 304#define MAP_NOFAULT 0x0004 305#define MAP_PREFAULT 0x0008 306#define MAP_PREFAULT_PARTIAL 0x0010 307#define MAP_DISABLE_SYNCER 0x0020 308#define MAP_DISABLE_COREDUMP 0x0100 309#define MAP_PREFAULT_MADVISE 0x0200 /* from (user) madvise request */ 310#define MAP_STACK_GROWS_DOWN 0x1000 311#define MAP_STACK_GROWS_UP 0x2000 312 313/* 314 * vm_fault option flags 315 */ 316#define VM_FAULT_NORMAL 0 /* Nothing special */ 317#define VM_FAULT_CHANGE_WIRING 1 /* Change the wiring as appropriate */ 318#define VM_FAULT_USER_WIRE 2 /* Likewise, but for user purposes */ 319#define VM_FAULT_WIRE_MASK (VM_FAULT_CHANGE_WIRING|VM_FAULT_USER_WIRE) 320#define VM_FAULT_DIRTY 8 /* Dirty the page */ 321 322/* 323 * vm_map_wire and vm_map_unwire option flags 324 */ 325#define VM_MAP_WIRE_SYSTEM 0 /* wiring in a kernel map */ 326#define VM_MAP_WIRE_USER 1 /* wiring in a user map */ 327 328#define VM_MAP_WIRE_NOHOLES 0 /* region must not have holes */ 329#define VM_MAP_WIRE_HOLESOK 2 /* region may have holes */ 330 331#ifdef _KERNEL 332boolean_t vm_map_check_protection (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t); 333vm_map_t vm_map_create(pmap_t, vm_offset_t, vm_offset_t); 334int vm_map_delete (vm_map_t, vm_offset_t, vm_offset_t); 335int vm_map_find (vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t *, vm_size_t, boolean_t, vm_prot_t, vm_prot_t, int); 336int vm_map_findspace (vm_map_t, vm_offset_t, vm_size_t, vm_offset_t *); 337int vm_map_inherit (vm_map_t, vm_offset_t, vm_offset_t, vm_inherit_t); 338void vm_map_init (struct vm_map *, vm_offset_t, vm_offset_t); 339int vm_map_insert (vm_map_t, vm_object_t, vm_ooffset_t, vm_offset_t, vm_offset_t, vm_prot_t, vm_prot_t, int); 340int vm_map_lookup (vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, 341 vm_pindex_t *, vm_prot_t *, boolean_t *); 342int vm_map_lookup_locked(vm_map_t *, vm_offset_t, vm_prot_t, vm_map_entry_t *, vm_object_t *, 343 vm_pindex_t *, vm_prot_t *, boolean_t *); 344void vm_map_lookup_done (vm_map_t, vm_map_entry_t); 345boolean_t vm_map_lookup_entry (vm_map_t, vm_offset_t, vm_map_entry_t *); 346void vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, vm_prot_t prot, 347 vm_object_t object, vm_pindex_t pindex, vm_size_t size, int flags); 348int vm_map_protect (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t); 349int vm_map_remove (vm_map_t, vm_offset_t, vm_offset_t); 350void vm_map_startup (void); 351int vm_map_submap (vm_map_t, vm_offset_t, vm_offset_t, vm_map_t); 352int vm_map_sync(vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t); 353int vm_map_madvise (vm_map_t, vm_offset_t, vm_offset_t, int); 354void vm_map_simplify_entry (vm_map_t, vm_map_entry_t); 355void vm_init2 (void); 356int vm_map_stack (vm_map_t, vm_offset_t, vm_size_t, vm_prot_t, vm_prot_t, int); 357int vm_map_growstack (struct proc *p, vm_offset_t addr); 358int vm_map_unwire(vm_map_t map, vm_offset_t start, vm_offset_t end, 359 int flags); 360int vm_map_wire(vm_map_t map, vm_offset_t start, vm_offset_t end, 361 int flags); 362int vmspace_swap_count (struct vmspace *vmspace); 363#endif /* _KERNEL */ 364#endif /* _VM_MAP_ */
|