--- Net2/vm/vm_page.c 2018/04/24 18:09:24 1.1.1.3 +++ Net2/vm/vm_page.c 2018/04/24 18:15:00 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_page.c 7.4 (Berkeley) 5/7/91 + * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91 + * vm_page.c,v 1.5 1993/06/30 03:48:25 andrew Exp * * * Copyright (c) 1987, 1990 Carnegie-Mellon University. @@ -60,14 +61,6 @@ * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. - * - * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE - * -------------------- ----- ---------------------- - * CURRENT PATCH LEVEL: 1 00074 - * -------------------- ----- ---------------------- - * - * 22 Jan 93 Paul Mackerras Fixed bug where pages got lost - * */ /* @@ -263,7 +256,7 @@ vm_offset_t vm_page_startup(start, end, */ vm_page_free_count = npages = - (end - start)/(PAGE_SIZE + sizeof(struct vm_page)); + (end - start + sizeof(struct vm_page))/(PAGE_SIZE + sizeof(struct vm_page)); /* * Initialize the mem entry structures now, and @@ -555,6 +548,14 @@ vm_page_t vm_page_alloc(object, offset) spl = splimp(); /* XXX */ simple_lock(&vm_page_queue_free_lock); + if ( object != kernel_object && + object != kmem_object && + vm_page_free_count <= vm_page_free_reserved) { + + simple_unlock(&vm_page_queue_free_lock); + splx(spl); + return(NULL); + } if (queue_empty(&vm_page_queue_free)) { simple_unlock(&vm_page_queue_free_lock); splx(spl);