vm_kern.c (188967) | vm_kern.c (189015) |
---|---|
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 --- 49 unchanged lines hidden (view full) --- 58 * rights to redistribute these changes. 59 */ 60 61/* 62 * Kernel memory management. 63 */ 64 65#include <sys/cdefs.h> | 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 --- 49 unchanged lines hidden (view full) --- 58 * rights to redistribute these changes. 59 */ 60 61/* 62 * Kernel memory management. 63 */ 64 65#include <sys/cdefs.h> |
66__FBSDID("$FreeBSD: head/sys/vm/vm_kern.c 188967 2009-02-23 23:30:17Z rwatson $"); | 66__FBSDID("$FreeBSD: head/sys/vm/vm_kern.c 189015 2009-02-24 20:57:43Z kib $"); |
67 68#include <sys/param.h> 69#include <sys/systm.h> 70#include <sys/kernel.h> /* for ticks and hz */ 71#include <sys/eventhandler.h> 72#include <sys/lock.h> 73#include <sys/mutex.h> 74#include <sys/proc.h> --- 192 unchanged lines hidden (view full) --- 267 */ 268vm_offset_t 269kmem_malloc(map, size, flags) 270 vm_map_t map; 271 vm_size_t size; 272 int flags; 273{ 274 vm_offset_t offset, i; | 67 68#include <sys/param.h> 69#include <sys/systm.h> 70#include <sys/kernel.h> /* for ticks and hz */ 71#include <sys/eventhandler.h> 72#include <sys/lock.h> 73#include <sys/mutex.h> 74#include <sys/proc.h> --- 192 unchanged lines hidden (view full) --- 267 */ 268vm_offset_t 269kmem_malloc(map, size, flags) 270 vm_map_t map; 271 vm_size_t size; 272 int flags; 273{ 274 vm_offset_t offset, i; |
275 vm_map_entry_t entry, freelist; | 275 vm_map_entry_t entry; |
276 vm_offset_t addr; 277 vm_page_t m; 278 int pflags; 279 280 size = round_page(size); 281 addr = vm_map_min(map); 282 283 /* --- 67 unchanged lines hidden (view full) --- 351 m = vm_page_lookup(kmem_object, 352 OFF_TO_IDX(offset + i)); 353 vm_page_lock_queues(); 354 vm_page_unwire(m, 0); 355 vm_page_free(m); 356 vm_page_unlock_queues(); 357 } 358 VM_OBJECT_UNLOCK(kmem_object); | 276 vm_offset_t addr; 277 vm_page_t m; 278 int pflags; 279 280 size = round_page(size); 281 addr = vm_map_min(map); 282 283 /* --- 67 unchanged lines hidden (view full) --- 351 m = vm_page_lookup(kmem_object, 352 OFF_TO_IDX(offset + i)); 353 vm_page_lock_queues(); 354 vm_page_unwire(m, 0); 355 vm_page_free(m); 356 vm_page_unlock_queues(); 357 } 358 VM_OBJECT_UNLOCK(kmem_object); |
359 freelist = NULL; 360 vm_map_delete(map, addr, addr + size, &freelist); | 359 vm_map_delete(map, addr, addr + size); |
361 vm_map_unlock(map); | 360 vm_map_unlock(map); |
362 vm_map_entry_free_freelist(map, freelist); | |
363 return (0); 364 } 365 if (flags & M_ZERO && (m->flags & PG_ZERO) == 0) 366 pmap_zero_page(m); 367 m->valid = VM_PAGE_BITS_ALL; 368 KASSERT((m->flags & PG_UNMANAGED) != 0, 369 ("kmem_malloc: page %p is managed", m)); 370 } --- 82 unchanged lines hidden (view full) --- 453 * waiting for memory in that map. 454 */ 455void 456kmem_free_wakeup(map, addr, size) 457 vm_map_t map; 458 vm_offset_t addr; 459 vm_size_t size; 460{ | 361 return (0); 362 } 363 if (flags & M_ZERO && (m->flags & PG_ZERO) == 0) 364 pmap_zero_page(m); 365 m->valid = VM_PAGE_BITS_ALL; 366 KASSERT((m->flags & PG_UNMANAGED) != 0, 367 ("kmem_malloc: page %p is managed", m)); 368 } --- 82 unchanged lines hidden (view full) --- 451 * waiting for memory in that map. 452 */ 453void 454kmem_free_wakeup(map, addr, size) 455 vm_map_t map; 456 vm_offset_t addr; 457 vm_size_t size; 458{ |
461 vm_map_entry_t freelist; | |
462 | 459 |
463 freelist = NULL; | |
464 vm_map_lock(map); | 460 vm_map_lock(map); |
465 (void) vm_map_delete(map, trunc_page(addr), round_page(addr + size), 466 &freelist); | 461 (void) vm_map_delete(map, trunc_page(addr), round_page(addr + size)); |
467 if (map->needs_wakeup) { 468 map->needs_wakeup = FALSE; 469 vm_map_wakeup(map); 470 } 471 vm_map_unlock(map); | 462 if (map->needs_wakeup) { 463 map->needs_wakeup = FALSE; 464 vm_map_wakeup(map); 465 } 466 vm_map_unlock(map); |
472 vm_map_entry_free_freelist(map, freelist); | |
473} 474 475/* 476 * kmem_init: 477 * 478 * Create the kernel map; insert a mapping covering kernel text, 479 * data, bss, and all space allocated thus far (`boostrap' data). The 480 * new map will thus map the range between VM_MIN_KERNEL_ADDRESS and --- 46 unchanged lines hidden --- | 467} 468 469/* 470 * kmem_init: 471 * 472 * Create the kernel map; insert a mapping covering kernel text, 473 * data, bss, and all space allocated thus far (`boostrap' data). The 474 * new map will thus map the range between VM_MIN_KERNEL_ADDRESS and --- 46 unchanged lines hidden --- |