vm_reserv.c (238510) | vm_reserv.c (248084) |
---|---|
1/*- 2 * Copyright (c) 2002-2006 Rice University 3 * Copyright (c) 2007-2008 Alan L. Cox <alc@cs.rice.edu> 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Alan L. Cox, 7 * Olivier Crameri, Peter Druschel, Sitaram Iyer, and Juan Navarro. 8 * --- 23 unchanged lines hidden (view full) --- 32/* 33 * Superpage reservation management module 34 * 35 * Any external functions defined by this module are only to be used by the 36 * virtual memory system. 37 */ 38 39#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002-2006 Rice University 3 * Copyright (c) 2007-2008 Alan L. Cox <alc@cs.rice.edu> 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Alan L. Cox, 7 * Olivier Crameri, Peter Druschel, Sitaram Iyer, and Juan Navarro. 8 * --- 23 unchanged lines hidden (view full) --- 32/* 33 * Superpage reservation management module 34 * 35 * Any external functions defined by this module are only to be used by the 36 * virtual memory system. 37 */ 38 39#include <sys/cdefs.h> |
40__FBSDID("$FreeBSD: head/sys/vm/vm_reserv.c 238510 2012-07-15 21:46:19Z alc $"); | 40__FBSDID("$FreeBSD: head/sys/vm/vm_reserv.c 248084 2013-03-09 02:32:23Z attilio $"); |
41 42#include "opt_vm.h" 43 44#include <sys/param.h> 45#include <sys/kernel.h> 46#include <sys/lock.h> 47#include <sys/malloc.h> 48#include <sys/mutex.h> 49#include <sys/queue.h> | 41 42#include "opt_vm.h" 43 44#include <sys/param.h> 45#include <sys/kernel.h> 46#include <sys/lock.h> 47#include <sys/malloc.h> 48#include <sys/mutex.h> 49#include <sys/queue.h> |
50#include <sys/rwlock.h> |
|
50#include <sys/sbuf.h> 51#include <sys/sysctl.h> 52#include <sys/systm.h> 53 54#include <vm/vm.h> 55#include <vm/vm_param.h> 56#include <vm/vm_object.h> 57#include <vm/vm_page.h> --- 248 unchanged lines hidden (view full) --- 306 vm_paddr_t pa, size; 307 vm_page_t m, m_ret, mpred, msucc; 308 vm_pindex_t first, leftcap, rightcap; 309 vm_reserv_t rv; 310 u_long allocpages, maxpages, minpages; 311 int i, index, n; 312 313 mtx_assert(&vm_page_queue_free_mtx, MA_OWNED); | 51#include <sys/sbuf.h> 52#include <sys/sysctl.h> 53#include <sys/systm.h> 54 55#include <vm/vm.h> 56#include <vm/vm_param.h> 57#include <vm/vm_object.h> 58#include <vm/vm_page.h> --- 248 unchanged lines hidden (view full) --- 307 vm_paddr_t pa, size; 308 vm_page_t m, m_ret, mpred, msucc; 309 vm_pindex_t first, leftcap, rightcap; 310 vm_reserv_t rv; 311 u_long allocpages, maxpages, minpages; 312 int i, index, n; 313 314 mtx_assert(&vm_page_queue_free_mtx, MA_OWNED); |
314 VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); | 315 VM_OBJECT_ASSERT_WLOCKED(object); |
315 KASSERT(npages != 0, ("vm_reserv_alloc_contig: npages is 0")); 316 317 /* 318 * Is a reservation fundamentally impossible? 319 */ 320 if (pindex < VM_RESERV_INDEX(object, pindex) || 321 pindex + npages > object->size) 322 return (NULL); --- 167 unchanged lines hidden (view full) --- 490vm_page_t 491vm_reserv_alloc_page(vm_object_t object, vm_pindex_t pindex) 492{ 493 vm_page_t m, mpred, msucc; 494 vm_pindex_t first, leftcap, rightcap; 495 vm_reserv_t rv; 496 497 mtx_assert(&vm_page_queue_free_mtx, MA_OWNED); | 316 KASSERT(npages != 0, ("vm_reserv_alloc_contig: npages is 0")); 317 318 /* 319 * Is a reservation fundamentally impossible? 320 */ 321 if (pindex < VM_RESERV_INDEX(object, pindex) || 322 pindex + npages > object->size) 323 return (NULL); --- 167 unchanged lines hidden (view full) --- 491vm_page_t 492vm_reserv_alloc_page(vm_object_t object, vm_pindex_t pindex) 493{ 494 vm_page_t m, mpred, msucc; 495 vm_pindex_t first, leftcap, rightcap; 496 vm_reserv_t rv; 497 498 mtx_assert(&vm_page_queue_free_mtx, MA_OWNED); |
498 VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); | 499 VM_OBJECT_ASSERT_WLOCKED(object); |
499 500 /* 501 * Is a reservation fundamentally impossible? 502 */ 503 if (pindex < VM_RESERV_INDEX(object, pindex) || 504 pindex >= object->size) 505 return (NULL); 506 --- 358 unchanged lines hidden (view full) --- 865 * The object must be locked. 866 */ 867void 868vm_reserv_rename(vm_page_t m, vm_object_t new_object, vm_object_t old_object, 869 vm_pindex_t old_object_offset) 870{ 871 vm_reserv_t rv; 872 | 500 501 /* 502 * Is a reservation fundamentally impossible? 503 */ 504 if (pindex < VM_RESERV_INDEX(object, pindex) || 505 pindex >= object->size) 506 return (NULL); 507 --- 358 unchanged lines hidden (view full) --- 866 * The object must be locked. 867 */ 868void 869vm_reserv_rename(vm_page_t m, vm_object_t new_object, vm_object_t old_object, 870 vm_pindex_t old_object_offset) 871{ 872 vm_reserv_t rv; 873 |
873 VM_OBJECT_LOCK_ASSERT(new_object, MA_OWNED); | 874 VM_OBJECT_ASSERT_WLOCKED(new_object); |
874 rv = vm_reserv_from_page(m); 875 if (rv->object == old_object) { 876 mtx_lock(&vm_page_queue_free_mtx); 877 if (rv->object == old_object) { 878 LIST_REMOVE(rv, objq); 879 LIST_INSERT_HEAD(&new_object->rvq, rv, objq); 880 rv->object = new_object; 881 rv->pindex -= old_object_offset; --- 40 unchanged lines hidden --- | 875 rv = vm_reserv_from_page(m); 876 if (rv->object == old_object) { 877 mtx_lock(&vm_page_queue_free_mtx); 878 if (rv->object == old_object) { 879 LIST_REMOVE(rv, objq); 880 LIST_INSERT_HEAD(&new_object->rvq, rv, objq); 881 rv->object = new_object; 882 rv->pindex -= old_object_offset; --- 40 unchanged lines hidden --- |