swap_pager.h revision 10080
11541Srgrimes/* 21541Srgrimes * Copyright (c) 1990 University of Utah. 31549Srgrimes * Copyright (c) 1991 The Regents of the University of California. 41549Srgrimes * All rights reserved. 51541Srgrimes * 61541Srgrimes * This code is derived from software contributed to Berkeley by 71541Srgrimes * the Systems Programming Group of the University of Utah Computer 81541Srgrimes * Science Department. 91541Srgrimes * 101541Srgrimes * Redistribution and use in source and binary forms, with or without 111541Srgrimes * modification, are permitted provided that the following conditions 121541Srgrimes * are met: 131541Srgrimes * 1. Redistributions of source code must retain the above copyright 141541Srgrimes * notice, this list of conditions and the following disclaimer. 151541Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 161541Srgrimes * notice, this list of conditions and the following disclaimer in the 171541Srgrimes * documentation and/or other materials provided with the distribution. 181541Srgrimes * 3. All advertising materials mentioning features or use of this software 191541Srgrimes * must display the following acknowledgement: 201541Srgrimes * This product includes software developed by the University of 211541Srgrimes * California, Berkeley and its contributors. 221541Srgrimes * 4. Neither the name of the University nor the names of its contributors 231541Srgrimes * may be used to endorse or promote products derived from this software 241541Srgrimes * without specific prior written permission. 251541Srgrimes * 261541Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 271541Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 281541Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 291541Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 301541Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 311541Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 321541Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 331541Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 341541Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 351541Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 361541Srgrimes * SUCH DAMAGE. 371541Srgrimes * 381549Srgrimes * from: @(#)swap_pager.h 7.1 (Berkeley) 12/5/90 3910080Sbde * $Id: swap_pager.h,v 1.8 1995/07/16 13:28:35 davidg Exp $ 401541Srgrimes */ 411541Srgrimes 421549Srgrimes/* 431549Srgrimes * Modifications to the block allocation data structure by John S. Dyson 441549Srgrimes * 18 Dec 93. 451549Srgrimes */ 461549Srgrimes 471541Srgrimes#ifndef _SWAP_PAGER_ 481541Srgrimes#define _SWAP_PAGER_ 1 491541Srgrimes 501541Srgrimes/* 511549Srgrimes * SWB_NPAGES can be set to any value from 1 to 16 pages per allocation, 521549Srgrimes * however, due to the allocation spilling into non-swap pager backed memory, 531549Srgrimes * suggest keeping SWB_NPAGES small (1-4). If high performance is manditory 541549Srgrimes * perhaps up to 8 pages might be in order???? 551549Srgrimes * Above problem has been fixed, now we support 16 pages per block. Unused 561549Srgrimes * space is recovered by the swap pager now... 571541Srgrimes */ 581549Srgrimes#define SWB_NPAGES 8 595455Sdgstruct swblock { 601549Srgrimes unsigned short swb_valid; /* bitmask for valid pages */ 611549Srgrimes unsigned short swb_locked; /* block locked */ 625455Sdg int swb_block[SWB_NPAGES]; /* unfortunately int instead of daddr_t */ 631541Srgrimes}; 645455Sdgtypedef struct swblock *sw_blk_t; 651541Srgrimes 661549Srgrimes#ifdef KERNEL 6710080Sbdeextern struct pagerlst swap_pager_un_object_list; 6810080Sbde 699507Sdgvoid swap_pager_init __P((void)); 709507Sdgvm_object_t swap_pager_alloc __P((void *, vm_size_t, vm_prot_t, vm_offset_t)); 719507Sdgvoid swap_pager_dealloc __P((vm_object_t)); 729507Sdgint swap_pager_getpages __P((vm_object_t, vm_page_t *, int, int)); 739507Sdgint swap_pager_putpages __P((vm_object_t, vm_page_t *, int, boolean_t, int *)); 749507Sdgboolean_t swap_pager_haspage __P((vm_object_t, vm_offset_t, int *, int *)); 759507Sdgvoid swap_pager_sync __P((void)); 769507Sdgvoid swap_pager_iodone __P((struct buf *)); 779507Sdgint swap_pager_swp_alloc __P((vm_object_t, int)); 789507Sdgvoid swap_pager_copy __P((vm_object_t, vm_offset_t, vm_object_t, vm_offset_t, vm_offset_t)); 799507Sdgvoid swap_pager_freespace __P((vm_object_t, vm_offset_t, vm_offset_t)); 809507Sdgvoid swap_pager_swap_init __P((void)); 811549Srgrimes#endif 821549Srgrimes 835455Sdg#endif /* _SWAP_PAGER_ */ 84