The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/vm/swap_pager.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 1990 University of Utah.
    3  * Copyright (c) 1991 The Regents of the University of California.
    4  * All rights reserved.
    5  *
    6  * This code is derived from software contributed to Berkeley by
    7  * the Systems Programming Group of the University of Utah Computer
    8  * Science Department.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *      This product includes software developed by the University of
   21  *      California, Berkeley and its contributors.
   22  * 4. Neither the name of the University nor the names of its contributors
   23  *    may be used to endorse or promote products derived from this software
   24  *    without specific prior written permission.
   25  *
   26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   36  * SUCH DAMAGE.
   37  *
   38  *      from: @(#)swap_pager.h  7.1 (Berkeley) 12/5/90
   39  * $FreeBSD: src/sys/vm/swap_pager.h,v 1.28.2.1 2000/10/13 07:13:23 dillon Exp $
   40  * $DragonFly: src/sys/vm/swap_pager.h,v 1.6 2008/08/10 22:09:52 dillon Exp $
   41  */
   42 
   43 /*
   44  * Modifications to the block allocation data structure by John S. Dyson
   45  * 18 Dec 93.
   46  */
   47 
   48 #ifndef _VM_SWAP_PAGER_H_
   49 #define _VM_SWAP_PAGER_H_
   50 
   51 #ifndef _SYS_TYPES_H_
   52 #include <sys/types.h>
   53 #endif
   54 #ifndef _VM_VM_OBJECT_H_
   55 #include <vm/vm_object.h>
   56 #endif
   57 #ifndef _SYS_BLIST_H_
   58 #include <sys/blist.h>
   59 #endif
   60 
   61 /*
   62  * SWB_NPAGES must be a power of 2.  It may be set to 1, 2, 4, 8, or 16
   63  * pages per allocation.  We recommend you stick with the default of 8.
   64  * The 16-page limit is due to the radix code (kern/subr_blist.c).
   65  */
   66 #define SWB_NPAGES      16
   67 
   68 /*
   69  * Piecemeal swap metadata structure.  Swap is stored in a hash table.
   70  *
   71  * Storage use is ~1:16384 or so.
   72  *
   73  * Overall memory utilization is about the same as the old swap structure.
   74  */
   75 
   76 #define SWAP_META_PAGES         (SWB_NPAGES * 2)
   77 #define SWAP_META_MASK          (SWAP_META_PAGES - 1)
   78 
   79 struct swblock {
   80         RB_ENTRY(swblock) swb_entry;
   81         vm_pindex_t     swb_index;
   82         int             swb_count;
   83         swblk_t         swb_pages[SWAP_META_PAGES];
   84 };
   85 
   86 #ifdef _KERNEL
   87 extern int swap_pager_full;
   88 extern int vm_swap_size;
   89 extern int vm_swap_max;
   90 extern int vm_swap_cache_use;
   91 extern int vm_swap_anon_use;
   92 extern int vm_swapcache_read_enable;
   93 extern int vm_swapcache_inactive_heuristic;
   94 extern int vm_swapcache_use_chflags;
   95 
   96 extern struct blist *swapblist;
   97 extern int nswap_lowat, nswap_hiwat;
   98 
   99 void swap_pager_putpages (vm_object_t, struct vm_page **, int, boolean_t, int *);
  100 boolean_t swap_pager_haspage (vm_object_t object, vm_pindex_t pindex);
  101 int swap_pager_swapoff (int devidx);
  102 
  103 int swap_pager_swp_alloc (vm_object_t, int);
  104 void swap_pager_copy (vm_object_t, vm_object_t, vm_pindex_t, int);
  105 void swap_pager_freespace (vm_object_t, vm_pindex_t, vm_pindex_t);
  106 void swap_pager_freespace_all (vm_object_t);
  107 int swap_pager_condfree(vm_object_t, vm_pindex_t *, int);
  108 
  109 void swap_pager_page_inserted(vm_page_t);
  110 void swap_pager_swap_init (void);
  111 void swap_pager_newswap (void);
  112 int swap_pager_reserve (vm_object_t, vm_pindex_t, vm_size_t);
  113 
  114 void swapacctspace(swblk_t base, swblk_t count);
  115 
  116 /*
  117  * newswap functions
  118  */
  119 
  120 void swap_pager_page_removed (struct vm_page *, vm_object_t);
  121 
  122 /* choose underlying swap device and queue up I/O */
  123 struct buf;
  124 void swstrategy (struct buf *bp);       /* probably needs to move elsewhere */
  125 
  126 #endif
  127 
  128 #endif                          /* _VM_SWAP_PAGER_H_ */

Cache object: 279fb0a150990aa60c79ee79d6fb3cfe


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.