From owner-svn-src-stable-8@FreeBSD.ORG Mon Aug 29 10:29:06 2011 Return-Path: Delivered-To: svn-src-stable-8@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4CEA2106566B; Mon, 29 Aug 2011 10:29:06 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3B5798FC17; Mon, 29 Aug 2011 10:29:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p7TAT6S1091010; Mon, 29 Aug 2011 10:29:06 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p7TAT66u091008; Mon, 29 Aug 2011 10:29:06 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201108291029.p7TAT66u091008@svn.freebsd.org> From: Konstantin Belousov Date: Mon, 29 Aug 2011 10:29:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225244 - stable/8/sys/vm X-BeenThere: svn-src-stable-8@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 8-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Aug 2011 10:29:06 -0000 Author: kib Date: Mon Aug 29 10:29:05 2011 New Revision: 225244 URL: http://svn.freebsd.org/changeset/base/225244 Log: MFC r221096 (by obrien): Reap old SPL comments. MFC r225089: Update some comments in swap_pager.c. Modified: stable/8/sys/vm/swap_pager.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/vm/swap_pager.c ============================================================================== --- stable/8/sys/vm/swap_pager.c Mon Aug 29 10:15:15 2011 (r225243) +++ stable/8/sys/vm/swap_pager.c Mon Aug 29 10:29:05 2011 (r225244) @@ -113,9 +113,9 @@ __FBSDID("$FreeBSD$"); #include /* - * SWB_NPAGES must be a power of 2. It may be set to 1, 2, 4, 8, or 16 - * pages per allocation. We recommend you stick with the default of 8. - * The 16-page limit is due to the radix code (kern/subr_blist.c). + * SWB_NPAGES must be a power of 2. It may be set to 1, 2, 4, 8, 16 + * or 32 pages per allocation. + * The 32-page limit is due to the radix code (kern/subr_blist.c). */ #ifndef MAX_PAGEOUT_CLUSTER #define MAX_PAGEOUT_CLUSTER 16 @@ -126,14 +126,11 @@ __FBSDID("$FreeBSD$"); #endif /* - * Piecemeal swap metadata structure. Swap is stored in a radix tree. - * - * If SWB_NPAGES is 8 and sizeof(char *) == sizeof(daddr_t), our radix - * is basically 8. Assuming PAGE_SIZE == 4096, one tree level represents - * 32K worth of data, two levels represent 256K, three levels represent - * 2 MBytes. This is acceptable. - * - * Overall memory utilization is about the same as the old swap structure. + * The swblock structure maps an object and a small, fixed-size range + * of page indices to disk addresses within a swap area. + * The collection of these mappings is implemented as a hash table. + * Unused disk addresses within a swap area are allocated and managed + * using a blist. */ #define SWCORRECT(n) (sizeof(void *) * (n) / sizeof(daddr_t)) #define SWAP_META_PAGES (SWB_NPAGES * 2) @@ -392,7 +389,6 @@ swp_pager_free_nrpage(vm_page_t m) * * No restrictions on call * This routine may not block. - * This routine must be called at splvm() */ static void swp_sizecheck(void) @@ -417,8 +413,6 @@ swp_sizecheck(void) * the object and page index. It returns a pointer to a pointer * to the object, or a pointer to a NULL pointer if it could not * find a swapblk. - * - * This routine must be called at splvm(). */ static struct swblock ** swp_pager_hash(vm_object_t object, vm_pindex_t index) @@ -558,12 +552,7 @@ swap_pager_swap_init(void) * and then converting it with swp_pager_meta_build(). * * This routine may block in vm_object_allocate() and create a named - * object lookup race, so we must interlock. We must also run at - * splvm() for the object lookup to handle races with interrupts, but - * we do not have to maintain splvm() in between the lookup and the - * add because (I believe) it is not possible to attempt to create - * a new swap object w/handle when a default object with that handle - * already exists. + * object lookup race, so we must interlock. * * MPSAFE */ @@ -636,9 +625,7 @@ swap_pager_alloc(void *handle, vm_ooffse * routine is typically called only when the entire object is * about to be destroyed. * - * This routine may block, but no longer does. - * - * The object must be locked or unreferenceable. + * The object must be locked. */ static void swap_pager_dealloc(vm_object_t object) @@ -680,11 +667,7 @@ swap_pager_dealloc(vm_object_t object) * Also has the side effect of advising that somebody made a mistake * when they configured swap and didn't configure enough. * - * Must be called at splvm() to avoid races with bitmap frees from - * vm_page_remove() aka swap_pager_page_removed(). - * - * This routine may not block - * This routine must be called at splvm(). + * This routine may not sleep. * * We allocate in round-robin fashion from the configured devices. */ @@ -754,14 +737,7 @@ swp_pager_strategy(struct buf *bp) * * This routine returns the specified swap blocks back to the bitmap. * - * Note: This routine may not block (it could in the old swap code), - * and through the use of the new blist routines it does not block. - * - * We must be called at splvm() to avoid races with bitmap frees from - * vm_page_remove() aka swap_pager_page_removed(). - * - * This routine may not block - * This routine must be called at splvm(). + * This routine may not sleep. */ static void swp_pager_freeswapspace(daddr_t blk, int npages) @@ -801,9 +777,6 @@ swp_pager_freeswapspace(daddr_t blk, int * The external callers of this routine typically have already destroyed * or renamed vm_page_t's associated with this range in the object so * we should be ok. - * - * This routine may be called at any spl. We up our spl to splvm temporarily - * in order to perform the metadata removal. */ void swap_pager_freespace(vm_object_t object, vm_pindex_t start, vm_size_t size) @@ -860,23 +833,16 @@ swap_pager_reserve(vm_object_t object, v * cases where both the source and destination have a valid swapblk, * we keep the destination's. * - * This routine is allowed to block. It may block allocating metadata + * This routine is allowed to sleep. It may sleep allocating metadata * indirectly through swp_pager_meta_build() or if paging is still in * progress on the source. * - * This routine can be called at any spl - * - * XXX vm_page_collapse() kinda expects us not to block because we - * supposedly do not need to allocate memory, but for the moment we - * *may* have to get a little memory from the zone allocator, but - * it is taken from the interrupt memory. We should be ok. - * * The source object contains no vm_page_t's (which is just as well) * * The source object is of type OBJT_SWAP. * - * The source and destination objects must be locked or - * inaccessible (XXX are they ?) + * The source and destination objects must be locked. + * Both object locks may temporarily be released. */ void swap_pager_copy(vm_object_t srcobject, vm_object_t dstobject, @@ -1053,8 +1019,7 @@ swap_pager_haspage(vm_object_t object, v * does NOT change the m->dirty status of the page. Also: MADV_FREE * depends on it. * - * This routine may not block - * This routine must be called at splvm() + * This routine may not sleep. */ static void swap_pager_unswapped(vm_page_t m) @@ -1462,7 +1427,7 @@ swap_pager_putpages(vm_object_t object, * operations, we vm_page_t->busy'd unbusy all pages ( we can do this * because we marked them all VM_PAGER_PEND on return from putpages ). * - * This routine may not block. + * This routine may not sleep. */ static void swp_pager_async_iodone(struct buf *bp) @@ -1642,7 +1607,7 @@ swp_pager_async_iodone(struct buf *bp) * Return 1 if at least one page in the given object is paged * out to the given swap device. * - * This routine may not block. + * This routine may not sleep. */ int swap_pager_isswapped(vm_object_t object, struct swdevt *sp) @@ -1782,9 +1747,7 @@ restart: ************************************************************************ * * These routines manipulate the swap metadata stored in the - * OBJT_SWAP object. All swp_*() routines must be called at - * splvm() because swap can be freed up by the low level vm_page - * code which might be called from interrupts beyond what splbio() covers. + * OBJT_SWAP object. * * Swap metadata is implemented with a global hash and not directly * linked into the object. Instead the object simply contains @@ -1800,9 +1763,6 @@ restart: * The specified swapblk is added to the object's swap metadata. If * the swapblk is not valid, it is freed instead. Any previously * assigned swapblk is freed. - * - * This routine must be called at splvm(), except when used to convert - * an OBJT_DEFAULT object into an OBJT_SWAP object. */ static void swp_pager_meta_build(vm_object_t object, vm_pindex_t pindex, daddr_t swapblk) @@ -1899,8 +1859,6 @@ done: * This routine will free swap metadata structures as they are cleaned * out. This routine does *NOT* operate on swap metadata associated * with resident pages. - * - * This routine must be called at splvm() */ static void swp_pager_meta_free(vm_object_t object, vm_pindex_t index, daddr_t count) @@ -1946,8 +1904,6 @@ swp_pager_meta_free(vm_object_t object, * * This routine locates and destroys all swap metadata associated with * an object. - * - * This routine must be called at splvm() */ static void swp_pager_meta_free_all(vm_object_t object) @@ -2002,8 +1958,6 @@ swp_pager_meta_free_all(vm_object_t obje * have to wait until paging is complete but otherwise can act on the * busy page. * - * This routine must be called at splvm(). - * * SWM_FREE remove and free swap block from metadata * SWM_POP remove from meta data but do not free.. pop it out */