Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 May 2012 04:33:32 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r235882 - stable/9/sys/vm
Message-ID:  <201205240433.q4O4XWKT015496@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alc
Date: Thu May 24 04:33:32 2012
New Revision: 235882
URL: http://svn.freebsd.org/changeset/base/235882

Log:
  MFC r232288
    Simplify kmem_alloc() by eliminating code that existed on account of
    external pagers in Mach.

Modified:
  stable/9/sys/vm/vm_kern.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/vm/vm_kern.c
==============================================================================
--- stable/9/sys/vm/vm_kern.c	Thu May 24 04:24:17 2012	(r235881)
+++ stable/9/sys/vm/vm_kern.c	Thu May 24 04:33:32 2012	(r235882)
@@ -161,7 +161,6 @@ kmem_alloc(map, size)
 {
 	vm_offset_t addr;
 	vm_offset_t offset;
-	vm_offset_t i;
 
 	size = round_page(size);
 
@@ -187,35 +186,6 @@ kmem_alloc(map, size)
 	vm_map_unlock(map);
 
 	/*
-	 * Guarantee that there are pages already in this object before
-	 * calling vm_map_wire.  This is to prevent the following
-	 * scenario:
-	 *
-	 * 1) Threads have swapped out, so that there is a pager for the
-	 * kernel_object. 2) The kmsg zone is empty, and so we are
-	 * kmem_allocing a new page for it. 3) vm_map_wire calls vm_fault;
-	 * there is no page, but there is a pager, so we call
-	 * pager_data_request.  But the kmsg zone is empty, so we must
-	 * kmem_alloc. 4) goto 1 5) Even if the kmsg zone is not empty: when
-	 * we get the data back from the pager, it will be (very stale)
-	 * non-zero data.  kmem_alloc is defined to return zero-filled memory.
-	 *
-	 * We're intentionally not activating the pages we allocate to prevent a
-	 * race with page-out.  vm_map_wire will wire the pages.
-	 */
-	VM_OBJECT_LOCK(kernel_object);
-	for (i = 0; i < size; i += PAGE_SIZE) {
-		vm_page_t mem;
-
-		mem = vm_page_grab(kernel_object, OFF_TO_IDX(offset + i),
-		    VM_ALLOC_NOBUSY | VM_ALLOC_ZERO | VM_ALLOC_RETRY);
-		mem->valid = VM_PAGE_BITS_ALL;
-		KASSERT((mem->oflags & VPO_UNMANAGED) != 0,
-		    ("kmem_alloc: page %p is managed", mem));
-	}
-	VM_OBJECT_UNLOCK(kernel_object);
-
-	/*
 	 * And finally, mark the data as non-pageable.
 	 */
 	(void) vm_map_wire(map, addr, addr + size,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205240433.q4O4XWKT015496>